Direct Addressing Module M18.1 Sections 12.1-12.2 Introduction to Computer Engineering by Richard E. Haskell 8086 Postbyte mod PBOC r/m mod reg r/m Introduction to Computer Engineering by Richard E. Haskell Table 12.1 Postbyte mod,r/m Fields r/m 000 001 010 011 100 101 110 111 mod = 11 byte word AL AX CL CX DL DX BL BX AH SP CH BP DH SI BH DI mod = 00 mod = 01 mod = 10 BX + SI BX + DI BP + SI BP + DI SI DI Direct BX BX + SI + disp8 BX + DI + disp8 BP + SI + disp8 BP + DI + disp8 SI + disp8 DI + disp8 BP + disp8 BX + disp8 BX + SI + disp16 BX + DI + disp16 BP + SI + disp16 BP + DI + disp16 SI + disp16 DI + disp16 BP + disp16 BX + disp16 Introduction to Computer Engineering by Richard E. Haskell Table 12.2 Postbyte reg Field reg 000 001 010 011 100 101 110 111 byte (b) AL CL DL BL AH CH DH BH word (w) AX CX DX BX SP BP SI DI mod PBOC r/m mod reg r/m Introduction to Computer Engineering by Richard E. Haskell Table 12.3 8086 Operand Addressing Modes Addressing Mode Direct Register Indirect Indexed Based Based Stack Based + Indexed Based + Indexed Stack r/m 110 100 101 111 100 101 111 110 000 001 010 011 mod = 00 Direct SI DI BX BX + SI BX + DI BP + SI BP + DI mod = 01 mod = 10 SI + disp8 DI + disp8 BX + disp8 BP + disp8 BX + SI + disp8 BX + DI + disp8 BP + SI + disp8 BP + DI + disp8 SI + disp16 DI + disp16 BX + disp16 BP + disp16 BX + SI + disp16 BX + DI + disp16 BP + SI + disp16 BP + DI + disp16 Introduction to Computer Engineering by Richard E. Haskell Direct Addressing Listing 12.1 joe.lst title Direct addressing example 0000 0000 stack segment para stack db 64 dup(?) 40 [ ?? ] 0040 stack ends 0000 0000 0001 data joe data segment public db ? ends 0000 code 0000 0000 0003 0005 000A 000E 0010 0012 main segment public assume cs:code,ds:data proc far mov ax,data ;set ds mov ds,ax mov joe,0fdh ;joe = fd inc joe ;joe = joe + 1 js m2 ;repeat until joe=0 je m1 ;do again endp 0012 ?? B8 8E C6 FE 78 74 ---- R D8 06 0000 R FD 06 0000 R FA F3 m1: m2: main code ends end main Introduction to Computer Engineering by Richard E. Haskell 0 Table A2.a Opcode Map 1 2 3 4 6 7 ADD w AX,imm PUSH ES POP ES ADC b ADC b ADC w ADC w ADC b r/m,reg r/m,reg reg,r/m reg,r/m AL,imm ADC w AX,imm PUSH SS POP SS 2 AND b AND w AND b AND w r/m,reg r/m,reg reg,r/m reg,r/m AND b AL,imm AND w AX,imm SEGMENT ES DAA 3 XOR b XOR w XOR b XOR w r/m,reg r/m,reg reg,r/m reg,r/m XOR b AL,imm XOR w AX,imm SEGMENT SS AAA 0 ADD b ADD w ADD b ADD w ADD b r/m,reg r/m,reg reg,r/m reg,r/m AL,imm 1 4 INC AX INC CX INC DX INC BX 5 PUSH AX PUSH CX PUSH DX PUSH BX 5 INC SP INC BP INC SI INC DI PUSH SP PUSH BP PUSH SI PUSH DI 6 7 JO JNO 8 * * JB/JNAE JNB/JAE JC JNC * * JE/JZ JNE/JNZ JBE/JNA JNBE/JA TEST b TEST w XCHG b XCHG w r/m,reg r/m,reg r/m,reg r/m,reg NOP XCHG CX,AX XCHG DX,AX XCHG BX,AX XCHG SP,AX XCHG BP,AX XCHG SI,AX XCHG DI,AX A MOV b AL,mem MOV w AX,mem MOV b mem,AL MOV w mem,AX MOVS b MOVS w CMPS b CMPS w B MOV AL,imm MOV CL,imm MOV DL,imm MOV BL,imm MOV AH,imm MOV CH,imm MOV DH,imm RET intra+ RET intra LES LDS MOV b MOV w reg.r/m reg.r/m r/m,imm r/m,imm * * * LOOPZ/ LOOPE LOOP JCXZ 9 C D * E LOOPNZ/ LOOPNE F LOCK REP/REPNE REPE/ REPNZ REPZ AAM MOV BH,imm XLAT AAD OUT b OUT w IN b IN w AL,port AX,port port,AL port,AX HLT CMC * Introduction to Computer Engineering by Richard E. Haskell * C6 MOV b r/m,imm Table 12.1 Postbyte mod,r/m Fields r/m 000 001 010 011 100 101 110 111 mod = 11 byte word AL AX CL CX DL DX BL BX AH SP CH BP DH SI BH DI MOV mod = 00 mod = 01 mod = 10 BX + SI BX + DI BP + SI BP + DI SI DI Direct BX BX + SI + disp8 BX + DI + disp8 BP + SI + disp8 BP + DI + disp8 SI + disp8 DI + disp8 BP + disp8 BX + disp8 BX + SI + disp16 BX + DI + disp16 BP + SI + disp16 BP + DI + disp16 SI + disp16 DI + disp16 BP + disp16 BX + disp16 JOE,0FDH r/m mod 0 0 0 0 0 1 1 0 Direct Addressing C6 06 00 00 FD primary opcode 8-bit immediate data postbyte offset address 0000H Introduction to Computer Engineering by Richard E. Haskell data joe jane mary jim data segment public db 12h dw 3456h db 78h dw 9abch ends 0000 0001 0002 0003 0004 0005 12 34 56 78 9a bc joe jane mary jim mov ax,joe Error: operand types must match mov ax,word ptr joe will move 1234 into ax mov bl,jane Error: operand types must match mov bl,byte ptr jane will move 34 into bl mov jane,mary Error: operand types must match mov byte ptr jane,mary will move 78 tointo offset address 0001 Introduction Computer Engineering by Richard E. Haskell