CSI-2006- Microprocessor and Interfacing SCOPE VIT UNIVERSITYA place to learn; A chance to grow SCOPE learn; A chance to grow VIT UNIVERSITYA place to •MOV Ax,5000h •MOV AX,BX •MOV AX,[SI] •MOV AX,[2000H] •MOV AX, 50H[BX] SCOPE learn; A chance to grow VIT UNIVERSITYA place to Converting Assembly Language Instructions to Machine Code • An instruction can be coded with 1 to 6 bytes • Byte 1 contains three kinds of information – Opcode field (6 bits) specifies the operation (add, subtract, move) – Register Direction Bit (D bit) Tells the register operand in REG field in byte 2 is source or destination operand 1: destination 0: source - Data Size Bit (W bit) Specifies whether the operation will be performed on 8-bit or 16-bit data 0: 8 bits 1: 16 bits SCOPE VIT UNIVERSITYA place to learn; A chance to grow Converting Assembly Language Instructions to Machine Code(REG MODE) • Byte 2 has three fields – Mode field (MOD) – Register field (REG) used to identify the register for the first operand – Register/memory field (R/M field) SCOPE VIT UNIVERSITYA place to learn; A chance to grow Converting Assembly Language Instructions to Machine Code(MEM MODE) SCOPE R/M \ MOD 00 01 10 000 BX+SI BX+SI+D8 BX+SI+D16 001 BX+DI BX+DI+D8 BX+SI+D16 010 BP+SI BP+SI+D8 BP+SI+D16 011 BP+DI BP+DI+D8 BP+DI+D16 100 SI SI+D8 SI+D16 101 DI DI+D8 DI+D16 110 D16(DIR ECT ADD) BP+D8 BP+D16 111 BX BX+D8 BX+D16 VIT UNIVERSITYA place to learn; A chance to grow Problem • MOV CL,[BX] – Copy a byte to CL from memory location whose EA is contained in BX. – M.A BX + DS – 6-bit code 100010 – D1 ; data being moved to reg CL – W0; Byte – 3 bit code Reg CL 001 – MOD 00; R/M 111 – Assembling all of these bits together 1000101000001111 SCOPE VIT UNIVERSITYA place to learn; A chance to grow Problems • MOV 43H[SI], DH – 1000100001110100 • Suppose that DS=1000H, SS=2000H,BP=1000H,DI=0100H.Determine the memory address accessed by each of the following instruction – MOV AL, [BP +DI] – MOV CX,[DI] – MOV DX,[BP] SCOPE VIT UNIVERSITYA place to learn; A chance to grow Instruction Set of 8086 SCOPE VIT UNIVERSITYA place to learn; A chance to grow Instruction Set of 8086 • 8086 Instructions can be classified into following six groups. – Data transfer instructions – Arithmetic instructions – Logical instructions – Flag manipulation – Control transfer instructions – String manipulating instructions – Processor control instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Instruction Set of 8086 • Data transfer group – Instructions for moving data b/w reg, reg & mem, reg & stack mem, acc & I/O device • Arithmetic group – Inst for add and sub of binary, BCD and ASCII data. – Inst for mul and div of signed and unsigned binary data. • Logical group – Ins for performing logical operations like AND, OR, X-OR, Complement, Shift, Rotate, etc., SCOPE VIT UNIVERSITYA place to learn; A chance to grow Instruction Set of 8086 • String manipulation group – Ins for moving string data b/w two memory locations, comparing string data w by w or B by B • Control transfer group – Ins to call a procedure/Subroutine in the main program – Ins to jump from one part to another part-Program either conditionally(aft checking flag) or un-c(without checking flag) • Processor control group – Ins to set/clear the flags, to delay and halt the processor execution. SCOPE VIT UNIVERSITYA place to learn; A chance to grow Instruction format • • • • 1 byte ins- Implied operand or reg mode 2 byte ins- Reg to/from mem/reg with no dis 3 byte ins-Reg to/from memory with 8-bit dis/d 4 byte ins-Reg to/from memory with 16-bit dis or 16-bit immediate data to reg/memory • 5 byte ins-Immediate 8-bit data to memory with 16-bit displacement • 6 byte ins-Immediate 16-bit data to memory with 16-bit displacement SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions • MOV, PUSH, POP, XCHG, XLAT, IN, OUT, LEA, LDS, LES, LSS, LAHF and SAHF • MOV- Copies a word or byte of data from a specified source to as specified destination SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions • PUSH – Used to store the word in a register or a memory location into the stack – SP is decremented by two after the execution of PUSH • Ex: PUSH CX ; PUSH the content of CX into the stack PUSH [BX] ; PUSH the word in the memory at [BX] into the stack • POP – It copies the top word from the stack to a dest specified in the instruction – Dest can be a GPR, SR or a memory location – After word is copied to the specified dest; SP Incremented by 2 • Ex: POP BX ; POP the content of BX from the stack SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions • XLAT: Translate a byte in AL from one code to another code. SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions • IN: Copies data from a port to the AL or AX reg. – Fixed port type, Variable port type – Fixed : 8-bit address of a port is specified directly • Ex: IN AL, 80H ;Input a byte from port with addr 80HAL – Variable: Port addr is loaded into the DX reg • DX 16 bit reg 0000H to FFFFH. • Ex: IN AX, [DX]; I/P a word from the 16-bit port with port address in DX. SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions • OUT: – AL Specified Port – Fixed port Eg: OUT 48H, AL ;Content of AL add – Variable port Eg: OUT [DX], AX; • LEA(Load effective address) – General Format LEA reg, source – Ex: LEA CX, [BX] [SI]; Load CX with the value equal to (BX) + (SI) represent the content of BX & SI SCOPE VIT UNIVERSITYA place to learn; A chance to grow Data Transfer Instructions • LDS: It loads the register and DS with words from the memory. – Format LDS reg, memory addr of first word – It is useful in initializing the SI and DS reg at the start of a string – Eg: LDS SI, [2000H] • LES and LSS: LES and LSS inst are similar to the LDS inst, except that instead of DS reg, the ES and SS reg are loaded along with the reg specified in the instruction. • LAHF : Copies the lower-order byte of the flag reg into AH • SAHF: Stores the content of AH in the lower-order byte of flag reg – Except the SAHF & POPF instructions, no other data transfer instructions affects the flag register. SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions Ex.1 ADD AX,2 ADC AX,2 STC ; set CF =1; MOV Al,5 ; Al=5 ADC Al,1 ; Al=7 RET Ex.2 INC BX; Increment the content of BX by 1 Note: AAA inst must always follow the addition of two unpacked BCD operands in AL. SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions Ex.3 ASCII Adjust after Addition. (AL=05(decimal);BH=06(decimal)) Corrects result in AH and AL after addition when working with BCD values. It works according to the following Algorithm: if low nibble of AL > 9 or AF = 1 then: When this result is to be sent to the terminal(printer), the ASCII Code of each decimal digit is easily found by adding 30H to each byte. AL = AL + 6 AH = AH + 1 AF = 1 CF = 1 else AF = 0; CF = 0 in both cases: clear the high nibble of AL. (Addition of 5 and 6 gives a decimal result of 11, which is equal to 0101H in unpacked BCD form, stored in AX) Example:MOV AX, 15 ; AH = 00, AL = 0Fh AAA ; AH = 01, AL = 05 SCOPE VIT UNIVERSITYA place to learn; A chance to grow RET Arithmetic Instructions Ex.4 Decimal adjust After Addition. Corrects the result of addition of two packed BCD values. Algorithm: if low nibble of AL > 9 or AF = 1 then: AL = AL + 6; AF = 1 if AL > 9Fh or CF = 1 then:AL = AL + 60h CF = 1 Example:MOV AL, 0Fh ; AL = 0Fh (15) DAA ; AL = 15h RET Problem: AL=10001000=88BCD CL=01001001=49BCD DAA ins affects AF,CF,PF,ZF only SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions • MUL: Multiplies an unsigned byte from some source an unsigned byte in AL reg or AX reg • If the MSB of a 16-bit or MSW of a 32-bit is 0, the CF and OF = 0. • AF,PF,SF,ZF are undefined after a MUL inst. • Multiply byte by word-Extend reg-Fill upper byte 0’s. • Ex: MUL BH ; AL times BH, result in AX – MUL CX; AX times CX, result high word in DX ; Low word in AX SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions • IMUL inst – Multiplies a signed byte from source times a signed byte in AL or AX – If the upper byte of a 16-bit result or the upper word of a 32-bit result contains only copies of the sign bit(all 0’s or all 1’s) then CF & OF both be 0’s – Or it contains part of the product, the CF & OF will both be 1’s. – Multiply a signed byte by a signed word, first move the byte into a word location and fill upper byte of the word with copies of the sign bit. CBW, to do this.(Extend sign bit of AL into AH) SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions • IMUL inst • ;AL = 01000101 ; 69 decimal • ;BL = 00001110 ;14 decimal • IMUL BL; AX = +966 decimal • ; AX = 0000001111 000 110 • ;MSB = 0 Positive result • ; Magnitude in true form • ; SF = 0 ; CF = 1; OF = 1. SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions • DIV inst – Divide an unsigned word by a byte – The word must be in AX reg. After division, the AL will contain an 8-bit result (quotient) and AH will contain 8-bit remainder – Divide by 0, or quotient is too large to fit in AL(greater than FFH), the 8086 automatically do a type 0 interrupt. – Double word divided by a word, the MSW of the double word must be in DX and LSW must be in AX. After div, AX contain 16 bit q, DX-16 bit Rem – Ex: DIV BL; word in AX/byte in BL; Quo in AL, Rem in AH SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions • IDIV inst – – – – SCOPE Divide a signed word by a signed byte Sign of the remainder will be the same as the sign of the dividend Divide by 0, quo is greater than 127(7FH) or less than -127(81H)-Type 0 Ex: 939/-45 VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions • IDIV inst • Ex 1: Signed word divided by a signed byte – AX = 939 decimal = 0000001110101011b = 03ABH – BL = -45 decimal = -2DH = D3H = 11010011b – IDIV BL ; Quotient in AL = 11101100 ; AL = ECH = -14 H = -20 decimal ; Remainder in AH = 00100111 ; AH = 27H = +39 decimal Note: Sign of the remainder will be the same as the sign of the dividend. SCOPE VIT UNIVERSITYA place to learn; A chance to grow Arithmetic Instructions • IDIV inst • Ex 2: Signed byte divided by a signed byte – AL = -38decimal = -26 H = 11001010b – CH = +3 decimal = +3 H = 00000011b • CBW • – – – – – – SCOPE ; Extend sign of AL through AH ; AX = 11111111 11001010 IDIV CH ; Divide AX by CH ; AL = 11110100 = -0CH = -12 decimal ; AH = 11111110 = -2H = -2 decimal Note: Sign of the remainder will be the same as the sign of the dividend. AAD – ASCII adjust before the division AAM -ASCII adjust AX after multiplication VIT UNIVERSITYA place to learn; A chance to grow Logical Instructions SCOPE VIT UNIVERSITYA place to learn; A chance to grow Logical Instructions • TEST instruction – Instruction ANDs the content of a source byte or word with the content of specified dest byte or wo – Flags are updated, but neither operand is changed – TEST inst is often used to set flags before a conditional jump inst – Format TEST dest, src – Ex: AL = 0111 1111 =7FH – TEST AL, 80H ; AL = 7FH(unchanged); ZF=PF=1;SF = 0 SCOPE VIT UNIVERSITYA place to learn; A chance to grow