Presentation is loading. Please wait.

Presentation is loading. Please wait.

LEA instruction The LEA instruction can be used to get the offset address of a variable Example ORG 100h MOV AL, VAR1 ; check value of VAR1 by moving it.

Similar presentations


Presentation on theme: "LEA instruction The LEA instruction can be used to get the offset address of a variable Example ORG 100h MOV AL, VAR1 ; check value of VAR1 by moving it."— Presentation transcript:

1 LEA instruction The LEA instruction can be used to get the offset address of a variable Example ORG 100h MOV AL, VAR1 ; check value of VAR1 by moving it to AL. LEA BX, VAR1 ; get address of VAR1 in BX. MOV BYTE PTR [BX], 44h ; modify the contents of VAR1. RET VAR1 DB 22h END

2 INT 10h / AH = 0Eh - teletype output
input: AL = character to write. this functions displays a character on the screen, advancing the cursor and scrolling the screen as necessary. the printing is always done to current active page. Example: mov al, 'a' mov ah, 0eh int 10h

3 LODSB Instruction Load byte at DS:[SI] into AL. Update SI. Example
ORG 100h LEA SI, a1 MOV CX, 5 MOV AH, 0Eh m: LODSB INT 10h LOOP m RET a1 DB 'H', 'e', 'l', 'l', 'o'

4 STOSB Instruction Store byte in AL into ES:[DI]. Update DI. Example
ORG 100h LEA DI, a1 MOV AL, 12h MOV CX, 5 REP STOSB RET a1 DB 5 dup(0)

5 MOVSB Instruction Copy byte at DS:[SI] to ES:[DI]. Update SI and DI.
Example ORG 100h CLD LEA SI, a1 LEA DI, a2 MOV CX, 5 REP MOVSB RET a1 DB 1,2,3,4,5 a2 DB 5 DUP(0)

6 AND Logical AND between all bits of two operands. Result is stored in operand1. Example: MOV AL, 'a' ; AL = b AND AL, b ; AL = b ('A') RET

7 OR Logical OR between all bits of two operands. Result is stored in first operand. Example: MOV AL, 'A' ; AL = b OR AL, b ; AL = b ('a') RET

8 XOR Logical XOR (Exclusive OR) between all bits of two operands. Result is stored in first operand. These rules apply: 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 1 = 1 0 XOR 0 = 0 Example: MOV AL, b XOR AL, b ; AL = b RET

9 TEST Logical AND between all bits of two operands for flags only. These flags are effected: ZF, SF, PF. Result is not stored anywhere. Example: Org 100h MOV ah, b MOV al, b MOV bh, b MOV bl, b TEST ah,ah ;Z=1, P=1 S=0 since ah is zero TEST al,al ;Z=0, P=0 S=1 since al is negative with odd parity TEST bh,bh ;Z=0, P=0 S=0 non-zero value with odd parity TEST bl,bl ;Z=0, P=1 S=0 non-zero value with even parity TEST ah,bl ;Z=1, P=1 S=0 TEST al,bh ;Z=0, P=1 S=0

10 NOT Invert each bit of the operand. Algorithm:
if bit is 1 turn it to 0. if bit is 0 turn it to 1. Example MOV AL, b NOT AL ; AL = b RET

11 NEG Negate. Makes operand negative (two's complement). Algorithm: Invert all bits of the operand Add 1 to inverted operand Example MOV AL, 5 ; AL = 05h NEG AL ; AL = 0FBh (-5) NEG AL ; AL = 05h (5) RET

12 SHL Shift operand1 Left. The number of shifts is set by operand2. Algorithm: Shift all bits left, the bit that goes off is set to CF. Zero bit is inserted to the right-most position. Example MOV AL, b SHL AL, 1 ; AL = b, CF=1. RET

13 SHR Shift operand1 Right. The number of shifts is set by operand2. Algorithm: Shift all bits right, the bit that goes off is set to CF. Zero bit is inserted to the left-most position. Example MOV AL, b SHR AL, 1 ; AL = b, CF=1. RET

14 SAR Shift Arithmetic operand1 Right. The number of shifts is set by operand2. Algorithm: Shift all bits right, the bit that goes off is set to CF. The sign bit that is inserted to the left-most position has the same value as before shift. Example MOV AL, 0E0h ; AL = b SAR AL, 1 ; AL = b, CF=0. MOV BL, 4Ch ; BL = b SAR BL, 1 ; BL = b, CF=0. RET

15 JMP Unconditional Jump. Transfers control to another part of the program. 4-byte address may be entered in this form: 1234h:5678h, first value is a segment second value is an offset. Example ORG 100H MOV AX, 5 ; set AX to 5. MOV BX, 2 ; set BX to 2. JMP calc ; go to 'calc'. back: JMP stop ; go to 'stop'. calc: ADD AX, BX ; add BX to AX. JMP back ; go 'back'. stop: RET ; return to operating system.

16 Jump Instructions That Test Single Flag

17 Jump Instructions for Signed Numbers

18 Jump Instructions for Unsigned Numbers

19 CMP Compare. Algorithm: operand1 - operand2 result is not stored anywhere, flags are set (OF, SF, ZF, AF, PF, CF) according to result. Example MOV AL, 5 MOV BL, 5 CMP AL, BL ; AL = 5, ZF = 1 (so equal!) RET If (reg2) > (reg1) then CF=0, ZF=0, SF=0 If (reg2) < (reg1) then CF=1, ZF=0, SF=1 If (reg2) = (reg1) then CF=0, ZF=1, SF=0

20 CMP Destination < Source: mov ax, 5 cmp ax, 10 ; CF = 1, ZF = 0
mov cx, 1000 cmp cx, ax ; ZF = 1, CF = 0 Destination > Source mov ax, 105 cmp ax, 0 ; ZF = 0 and CF = 0

21 JE Short Jump if first operand is Equal to second operand (as set by CMP instruction). Signed/Unsigned. Algorithm: if ZF = 1 then jump Example include 'emu8086.inc' ORG 100h MOV AL, 5 CMP AL, 5 JE label1 PRINT 'AL is not equal to 5.' JMP exit label1: PRINT 'AL is equal to 5.' exit: RET

22 JA Short Jump if first operand is Above second operand (as set by CMP instruction). Unsigned. Algorithm: if (CF = 0) and (ZF = 0) then jump Example include 'emu8086.inc' ORG 100h MOV AL, 250 CMP AL, 5 JA label1 PRINT 'AL is not above 5' JMP exit label1: PRINT 'AL is above 5' exit: RET

23 JZ Short Jump if Zero (equal). Set by CMP, SUB, ADD, TEST, AND, OR, XOR instructions. Algorithm: if ZF = 1 then jump Example include 'emu8086.inc' ORG 100h MOV AL, 5 CMP AL, 5 JZ label1 PRINT 'AL is not equal to 5.' JMP exit label1: PRINT 'AL is equal to 5.' exit: RET

24 JNB Short Jump if first operand is Not Below second operand (as set by CMP instruction). Unsigned. Algorithm: if CF = 0 then jump Example include 'emu8086.inc' ORG 100h MOV AL, 7 CMP AL, 5 JNB label1 PRINT 'AL < 5.' JMP exit label1: PRINT 'AL >= 5.' exit: RET

25 JO Short Jump if Overflow. Example include 'emu8086.inc' org 100h
MOV AL, 10 ADD AL, 118 ; JO label1 PRINT 'no overflow.' JMP exit label1: PRINT 'overflow!' exit: RET

26 High Level Language Structures
Branching Structure IF-THEN IF-THEN-ELSE CASE Looping Structures FOR LOOP WHILE LOOP REPEAT LOOP

27 High Level Language Structures
Branching Structure IF-THEN IF-THEN-ELSE CASE Looping Structures FOR LOOP WHILE LOOP

28 IF-THEN ORG 100h .CODE MOV AL, 3 CMP AL, 5 JNL END_IF ADD AL,5 END_IF:
ret AL<5 AL=AL+5 END FALSE TRUE

29 IF-THEN-ELSE ORG 100h .CODE MOV AH, 1 MOV AL,2 CMP AL, AH JNBE ELSE_
END FALSE TRUE AH=AL+5 ORG 100h .CODE MOV AH, 1 MOV AL,2 CMP AL, AH JNBE ELSE_ ADD AL,AH ADD AL,5 JMP END ELSE_: ADD AH, AL ADD AH,5 END: RET

30 CASE CASE AL < 0: PRINT ‘less than zero' = 0: PRINT ‘equal to zero'
> 0: PRINT ‘grater than zero' END_CASE include 'emu8086.inc' ORG 100h .CODE MOV AL, 0 CMP AL, 0 ;case JL NEGATIVE JE ZERO JG POSITIVE NEGATIVE: PRINT 'less than zero' JMP END_CASE ZERO: PRINT 'equal to zero' POSITIVE: PRINT 'grater than zero' END_CASE: RET

31 FOR LOOP ;initialize CX TOP: ;body of the loop LOOP TOP
include 'emu8086.inc' ORG 100h .CODE MOV CX, 10 TOP: PRINT 'A ' LOOP TOP

32 FOR LOOP Executed at least once. ;initialize CX JCXZ SKIP TOP:
If CX contains 0, the loop instruction decrements CX (CX = FFFFh) and the loop is then executed times! To prevent this, use instruction JCXZ before the loop. ;initialize CX JCXZ SKIP TOP: ;body of the loop LOOP TOP SKIP:

33 NESTED FOR LOOP


Download ppt "LEA instruction The LEA instruction can be used to get the offset address of a variable Example ORG 100h MOV AL, VAR1 ; check value of VAR1 by moving it."

Similar presentations


Ads by Google