1.(20pts) Following is the C/C++ code for comparing two integers:
if (x > y) result = 0;
else result = 1;
Convert the code above to its assembler equivalent, preserving the same functionality of the code.
2. Given the BYTE array "source", write an ASM procedure which reverses the string source and places the result into BYTE "destination". Pay attention to the difference in string sizes vs. individual character locations.
.DATA
source BYTE "Here I am looking for a letter A",0
destination BYTE SIZEOF source DUP (0)
.CODE
3. Consider the following variables in the .DATA section, then follow the code execution to populate the stack allocation.
.DATA
Var1 WORD 1234h, 5678h
Var2 BYTE 0D4h, 0B3h
.CODE
MOV AX, Var1
PUSH AX
MOV EBX, Var3 + 4
PUSH EBX
MOV CX, WORD PTR [Var3+2]
PUSH CX
PUSH Var3
|
ADDR
|
VALUE
|
0E
|
|
0D
|
|
0C
|
|
0B
|
|
0A
|
|
09
|
|
08
|
|
07
|
|
06
|
|
05
|
|
04
|
|
03
|
|
02
|
|
01
|
|
00
|
|
|
Var3 DWORD 0DEADBEEFh, 0F00FDEEDh
4. Assuming that data allocations for this program begin at 0x00401000h what will be the values of AX, ECX and EDI registers at the indicated locations?
.data
intarray WORD 100h,200h,300h,400h
.code
mov edi,OFFSET intarray EDI:_________________________
mov ecx,LENGTHOF intarray ECX:_________________________
mov ax,0
L1:
add ax,[edi]
add edi,TYPE intarray
loop L1
EDI:_________________________
ECX:_________________________
AX:__________________________
5. Convert the following compound expressions to assembly code:
a) if (al >= bl) AND (bl < cl)
X = 1;
b) if (al >= bl) OR (al > cl)
X = 1;
6. a) Write code that jumps to label L1 if either bit 1, 5, or 7 is set in the BL register.
Write code that jumps to label L1 if bits 2, 3, and 4 are all set in the BL register.
Write code that jumps to label L3 if EAX is negative.
Write code that jumps to label L4 if the expression (EBX - ECX) is greater than zero.