Presentation is loading. Please wait.

Presentation is loading. Please wait.

Assembly language programming Learning assembly language programming will help understanding the operations of the microprocessor To learn: –Need to know.

Similar presentations

Presentation on theme: "Assembly language programming Learning assembly language programming will help understanding the operations of the microprocessor To learn: –Need to know."— Presentation transcript:


2 Assembly language programming Learning assembly language programming will help understanding the operations of the microprocessor To learn: –Need to know the functions of various registers –Need to know how external memory is organized and how it is addressed to obtain instructions and data (different addressing modes) –Need to know what operations (or the instruction set) are supported by the CPU. For example, powerful CPUs support floating-point operations but simple CPUs only support integer operations

3 How to learn programming C –Concept L – Logic thinking P – Practice Concept – we must learn the basic syntax, such as how a program statement is written Logic thinking – programming is problem solving so we must think logically in order to derive a solution Practice – write programs

4 Assembly Program The native language is machine language (using 0,1 to represent the operation) A single machine instruction can take up one or more bytes of code Assembly language is used to write the program using alphanumeric symbols (or mnemonic), eg ADD, MOV, PUSH etc. The program will then be assembled (similar to compiled) and linked into an executable program. The executable program could,.exe, or.bin files

5 Flow of program development Program.asm Object file.obj Executable file.exe Assemble link

6 Example Machine code for mov AL, 00H B4 00 (2 bytes) After assemble, the value B400 will be stored in the memory When the program is executed, then the value B400 is read from memory, decoded and carry out the task

7 Assembly Program Each instruction is represented by one assembly language statement The statement must specify which operation (opcode) is to be performed and the operands Eg ADD AX, BX ADD is the operation AX is called the destination operand BX is called the source operand The result is AX = AX + BX When writing assembly language program, you need to think in the instruction level

8 Example In c++, you can do A = (B+C)*100 In assembly language, only one instruction per statement A = B; only one instruction - MOVE A = A+C; only one instruction - ADD A = A*100; only one instruction - Multiply

9 Format of Assembly language General format for an assembly language statement LabelInstructionComment Start: MovAX, BX ; copy BX into AX Start is a user defined name and you only put in a label in your statement when necessary!!!! The symbol : is used to indicate that it is a label

10 8086 Software Model

11 Software model In 8086, memory is divided into segments Only 4 64K-byte segments are active and these are: code, stack, data, and extra When you write your assembly language program for an 8086, theoretically you should define the different segments!!! To access the active segments, it is via the segment register: CS (code), SS (stack), DS (data), ES (extra) So when writing assembly language program, you must make use of the proper segment register or index register when you want to access the memory

12 Registers In assembly programming, you cannot operate on two memory locations in the same instruction So you usually need to store (move) value of one location into a register and then perform your operation After the operation, you then put the result back to the memory location Therefore, one form of operation that you will use very frequent is the store (move) operation!!! And using registers!!!!!

13 Example In C++ A = B+C ; A, B, C are variables In assembly language A,B, C representing memory locations so you cannot do A = B+C –MOV AL, B ; move value of B into AL register –ADD, AL, C ; do the add AL = AL +C –MOV A, AL ; put the result to A

14 Data registers AX, BX, CX,and DX – these are the general purpose registers but each of the registers also has special function Example –AX is called the accumulator – to store result in arithmetic operations Registers are 16-bit but can be used as 2 8-bit storage Each of the 4 data registers can be used as the source or destination of an operand during an arithmetic, logic, shift, or rotate operation. In some operations, the use of the accumulator is assumed, eg in I/O mapped input and output operations

15 Data register In based addressing mode, base register BX is used as a pointer to an operand in the current data segment. CX is used as a counter in some instructions, eg. CL contains the count of the number of bits by which the contents of the operand must be rotated or shifted by multiple-bit rotate DX, data register, is used in all multiplication and division, it also contains an input/output port address for some types of input/output operations

16 Pointer and index registers Stack – is used as a temporary storage Data can be stored by the PUSH instruction and extracted by the POP instruction Stack is accessed via the SP (Stack Pointer) and BP (Base Pointer) The BP contains an offset address in the current stack segment. This offset address is employed when using the based addressing mode and is commonly used by instructions in a subroutine that reference parameters that were passed by using the stack

17 Pointer and Index Register Source index register (SI) and Destination index register (DI) are used to hold offset addresses for use in indexed addressing of operands in memory When indexed type of addressing is used, then SI refers to the current data segment and DI refers to the current extra segment The index registers can also be used as source or destination registers in arithmetic and logical operations. But must be used in 16-bit mode

18 Data types Data can be in three forms: 8-bit, 16-bit, or 32-bit (double word) Integer could be signed or unsigned and in byte- wide or word-wide For signed integer (2’s complement format), the MSB is used as the sign-bit (0 for positive, 1 for negative) Signed 8-bit integer 127 to –128, For signed word 32767 to –32768 Latest microprocessors can also support 64-bit or even 128-bit data In 8086, only integer operations are supported!!!

19 A sample program.code ; indicate start of code segment.startup ; indicate start of program movAX, 0 mov BX, 0000H mov CX, 0 mov SI, AX mov DI, AX mov BP, AX END; end of file The flow of the program is usually top-down and instructions are executed one by one!!!

20 Assembly programming In general, an assembly program must include the code segment!! Other segments, such as stack segment, data segment are not compulsory There are key words to indicate the beginning of a segment as well as the end of a segment. Just like using main(){} in C++ Programming Example DSEG segment ‘data’ ; define the start of a data segment DSEG ENDS ; defines the end of a data segment Segment is the keyword DSEG is the name of the segment Similarly key words are used to define the beginning of a program, as well as the end.

21 Assembly language programming Example CSEG segment ‘code’ START PROC FAR ; define the start of a program (procedure) RET ; return START ENDP ; define the end of a procedure CSEG ends End start; end of everything Different assembler may have different syntax for the definition of the key words !!!!! Start is just a name it could be my_prog, ABC etc

22 More sample Stacksg segment para ‘stack’ ….; define the stack segment Stacksg ends Datasg segment para ……; declare data inside the data segment Datasg ends Codesg segment para ‘code’ Main proc far; assume ss:stacksg, ds: datasg, cs:codesg mov ax, datasg mov ds, ax …. mov ax, 4c00H int 21H Main endp Codesg ends end main End of everything

23 Definitions To declare a segment, the syntax is: segment_name SEGMENT alignment class Example Stacksg segment PARA (this statement is used in previous slide) PARA – define the alignment of the segment base address, the segment with a starting addressing that is evenly Divisible by 16 (ie the last digit is 0). But the default value is also base address divisible by 16 so the key word PARA can be ignored!

24 Definition ‘data’, ‘code’ – class entry. Is used to group related segments when linking. The linker automatically groups segments of the same class in memory PROC – define procedures (similar to a function) inside the code segment. Each procedure must be identified by an unique name. At the end of the procedure, you must include the ENDP

25 Definitions FAR – is related to program execution. When you request execution of a program, the program loader uses this procedure as the entry point for the first instruction to execute. Assume – to associate, or to assign, the name of a segment with a segment register (ie let CS point to the code segment, DS points to data segment etc) In some assembler, you need to move the base address of a segment directly into the segment register!!! END – ends the entire program and appears as the last statement. Usually the name of the first or only PROC designated as FAR is put after END

26 Syntax of a simple assembly language program If you are doing something simple then you do not need to define the segment Everything will be stored in the code segment

27 start: mov DL, 0H; move 0H to DL mov CL, op1; move op1 to CL mov AL, data; move data to AL step: cmp AL, op1 ; compare AL and op1 jc label1; if carry =1 jump to label1 sub AL, op1; AL = AL –op1 inc DL ; DL = DL+1 jmp step ; jump to step label1: mov AH, DL; move DL to AH HLT ; Halt end of program data db 45 ; define a variable called data op1 db 6; define a variable called op1

28 Assembler for 8086 WASM – a freeware can be download from internet ( Emu8086 (http:// – there is a trial version it does not support all the features such as interrupt The emu8086 consists of a tutorial and the reference for a complete instruction set Keil –

29 Defining data in a program Data is usually stored in the data segment You can define constants, work areas (a chunk of memory ) Data can be defined in different length (8-bit, 16-bit) 8-bit then use DB16-bit then use DW The definition for data: [name] Dn expression ; Dn is either DB or DW Name – a program that references a data item by means of a name. The name of an item is otherwise optional Dn – this is called the directives. It defines length of the data Expression – define the values (content) for the data

30 Examples for data FLDA DB ? ; define an uninitialized item called FLDA 8-bit FLDBDB25 ; initialize a data to 25 Define multiple data under the same name (like an array) FLDCDB21, 22, 23, 34 ; the data are stored in adjacent bytes FLDC stores the first value FLDC + 1 stores the second value You can do mov AL, FLDC+3

31 Example for data definition DUP – duplicate DUP can be used to define multiple storages DB 10 DUP (?) ; defines 10 bytes not initialize DB 5 DUP (12) ; 5 data all initialized to 12 String : DB ‘this is a test’ EQU – this directive does not define a data item; instead, it defines a value that the assembler can use to substitute in other instructions (similar to defining a constant in C programming or using the #define ) factor EQU 12 movCX, factor

32 Assembly Program Assembly language should be more effective and it will take up less memory space and run faster In real-time application, the use of assembly program is required because program that is written in a high-level language probably could not respond quickly enough You can also put assembly codes into your C++ program in order to reduce the execution time!!!!

33 Assembly language programming The syntax for different microprocessor may be different but the concept is the same so once you learn the assembly programming for one microprocessor, you can easily program other kinds of system For example, programming the 8051 series is very similar to the 8086

34 Addressing Modes Function of the addressing modes is to access the operands Available modes (9 modes): register addressing, immediate addressing, direct addressing, register indirect addressing, based addressing, indexed addressing, based indexed addressing, string addressing, and port addressing Addressing modes provide different ways of computing the address of an operand so that you can utilize your data with different techniques

35 Why addressing mode is important? In c++, you can define an array, or a variable –int x[10], y, *z; –Then to access different elements, you can do –Z = x ; –*(x+2); –x[0] = y How this can be done using assembly language programming? This is via different addressing modes!!!!

36 Register addressing mode The operand to be accessed is specified as residing in an internal register of the 8086 EgMOVAX, BX Move (MOV) contents of BX (the source operand), to AX (the destination operand) Both operands are in the internal registers


38 Pay attention to the value of IP and content of AX, BX

39 Immediate addressing mode Source operand is part of the instruction Usually immediate operands represent constant data The operands can be either a byte or word e.g MOVAL, 15 15 is a byte wide immediate source operand Or it could be MOV AL, #15 The immediate operand is stored in program storage memory (i.e the code segment) This value is also fetched into the instruction queue in the BIU No external memory bus cycle is initiated!



42 Direct addressing mode Move a byte or word between a memory location and a register the locations following the instruction opcode hold an effective memory address (EA) instead of data The address is a 16-bit offset of the storage location of the operand from the current value in the data segment register Physcial address = DS + offset The instruction set does not support a memory-to- memory transfer!

43 Direct addressing Data is assumed to be stored in the data segment so DS is used in calculating the physical address!!! External memory bus cycle is needed to do the read Example of direct addressing: mov AL, var1 Where Var1 can be regarded as a variable

44 Register indirect addressing mode Transfer a byte or word between a register and a memory location addressed by an index or base register –Example MOV AL, [SI] –SI – index register –The symbol [] always refer to an indirect addressing The effective address (EA) is stored either in a pointer register or an index register The pointer register can be either base register BX or base pointer register BP The index register can be source index register SI, or destination index register DI The default segment is either DS or ES

45 Register indirect addressing Eg MOVAX, [SI] Value stored in the SI register is used as the offset address The segment register is DS in this example Meaning of the above is to move the data stored in the memory location : DS + SI to the AX register In register indirect addressing mode, the EA (effective address) is a variable and depends on the index, or base register value

46 Address (in HEX) Content 0123619 0123518 0123420 01233 According to the memory map The result of the operation Mov [BX], CL will result in what??? If CL = 88 and BX = 1233H and DS =0H Physical address = DS + BX = 01233H

47 Different Addressing modes MOV AL, BLRegister addressing mode MOV AL, 15Himmediate MOV AL, abc MOV AL, [1234H] Direct abc is a variable 1234H is the offset address MOV AL, [SI]Register indirect MOV AL, [BX+SI]Base plus index MOV AL, [BX+4] MOV AL, ARRAY[3] Register relative MOV AL, [BX+DI+4] MOV AL, ARRAY[BX+DI] Base relative plus index

48 How to move the address of a variable to a register ? When using indirect addressing, such as –MOV AL, [SI] –SI is an address so how can we initialize SI? This is by the instruction called LEA (Load Effective Address) LEA is similar to x = &y in C++ Syntax of LEA: –LEA SI, ARRAY

49 Base-plus-index addressing mode Move a byte or word between a register and the memory location addressed by a base register (BP or BX) plus an index register (DI or SI) Physical address of the operand is obtained by adding a direct or indirect displacement to the contents of either base register BX or base pointer register BP and the current value in DS and SS, respectively. Eg MOV[BX+SI], AL Move value in AL to a location (DS+BX+SI) If BP is used then use SS instead of DS

50 Application of Base + index The base register (BX) often holds the beginning location of a memory array, while the index register (SI) holds the relative position of an element in the array Change the value of SI then you can access different elements in the array

51 Register relative addressing mode Move a byte or word between a register and memory location addressed by an index or base register plus a displacement Eg MOVAL, ARRAY[SI] EA = value of SI + ARRAY Physical address = EA + DS Eg movAX, [BX+4] Eg mov AX, array[DI+3] This is similar to the base-plus-index

52 Base relative plus index addressing mode Transfers a byte or word between a register and the memory location addressed by a base and an index register plus a displacement Combining the based addressing mode and the indexed addressing mode together Eg MOV AH, [BX+DI+4] EA = value of BX + 4 + value of DI Physical address = DS + EA This can be used to access data stored as a 2-D matrix Eg mov AX, array[BX+DI]

53 Example Select an instruction for each of the following tasks: –Copy BL into CL Mov CL, BL –Copy DS into AX Mov AX, DS Suppose that DS=1100H, BX=0200H, LIST=0250H, and SI=0500H, determine the address accessed by each of the following instructions: mov LIST[SI], DX (offset address: LIST + SI=0750H, PA = offset +DS = 11750H) mov CL, LIST[BX+SI] ( offset address: LIST+BX+SI = 0950H, PA = 11950H) mov CH, [BX+SI] (offset address: BX+SI = 0700H, PA = 11700H)

54 String addressing mode The string instructions of the 8086 instruction set automatically use the source (SI) and destination index registers (DI) to specify the effective addresses of the source and destination operands, respectively. Instruction is MOVS There is no operand after movs Don’t need to specify the register but SI and DI are being used during the program execution

55 Port addressing mode Port addressing is used in conjunction with IN and OUT instruction to access input and output ports. Any of the memory addressing modes can be used for the port address for memory-mapped ports. For ports in the I/O address space, only the direct addressing mode and an indirect addressing mode using DX are available Eg IN AL, 15H ; second operand is the port number Input data from the input port at address 15 16 of the I/O address space to register AL Eg INAL, DX Load AL with port number stored in DX

56 Exercises 1. Compute the physical address for the specified operand in each of the following instructions: MOV [DI], AX (destination operand) [DI] refers to the address 0200 so PA = 0B200H MOVDI, [SI](source operand) [SI] refers to 0100 so PA = 0B100H) MOV XYZ[DI], AH (destination operand) XYZ[DI] refers to 0400+0200, PA = 0B600H Given CS=0A00, DS=0B00, SI=0100, DI=0200, BX=0300, XYZ=0400

57 Exercises 2. Express the decimal numbers that follows as unpacked and packed BCD bytes (BCD – binary coded decimal) a.29 b. 88 Ans. unpacked BCD takes 1 byte per-digit so 29 becomes 00000010 00001001 as packed 00101001 3. How would the BCD numbers be stored in memory starting at address 0B000 Ans. if it is packed BCD then 29 will occupy one byte at 0B000, if as unpacked BCD then it occupies 2 bytes 00000010 at 0B001 and 00001001 at 0B000)

58 Instruction set A total of 117 basic instructions 5 groups: data transfer, arithmetic, logic, shift, and rotate Data transfer instructions – to move data either between its internal registers or between an internal register and a storage location in memory Cannot move data from one memory location to another memory location When the segment register is used as an operand then the move instruction must apply to a 16-bit data Mov SS, data ; then data must be 16-bit

59 Move instruction MnemonicMeaningFormatOperationFlags affected MovMovemov D,S(S) to (D)none Destination (D)Source (S) MemoryAX Memory Register Memory Register Immediate MemoryImmediate Seg-regReg16 Seg-regMem16 Reg16Seg-reg Mem16Seg-reg

60 Special data transfer instructions XCHG – exchange data between the source and destination Eg XCHGAX, DX Then value in DX is stored in AX and value in AX stored in DX

61 Special data transfer instruction LEA – load effective address LEA is are very important operation because it allows you to obtain an address of a variable or an array then you can apply the relative addressing modes!!!! Eg LEA SI,INPUT To load a specified register with a 16-bit offset address Similar to x = &y in a C++ program

62 Example of LEA Dat db 11H, 22H, 33H, 44H LEA BX, dat Mov AL, [BX+2] ; this is register relative addressing mode What is being stored in AL ?????

63 LDS – load register and DS EgLDSSI, [200] LDS will load a specified register (SI) and the DS 4 bytes of data will be fetched the first two stored in SI and the following two stored in DS LES – load register and ES LES will load a specified register and the ES

64 Arithmetic instructions Some examples of available arithmetic operations: add, substract, multiply, etc. Can apply to unsigned, signed, binary bytes, words, unpacked, packed decimal bytes, or ASCII numbers Packed decimal – two BCD digits are packed into a byte register or memory location Unpacked decimal numbers are stored one BCD digit per byte After an arithmetic operation, the flags are updated accordingly

65 Arithmetic instructions ADDAdd byte or word ADCAdd byte or word with carry IncIncrement byte or word by 1 AAAASCII adjust for addition DAADecimal adjust for addition SubSubtract byte or word SbbSubtract byte or word with borrow DECDecrement byte or word by 1 NEGNegate byte or word AASASCII adjust for subtraction DASDecimal adjust for subtraction MULMultiply byte or word unsigned IMULInteger multiply byte or word AAMASCII adjust for multiply DivDivide byte or word unsigned IdivInteger divide byte or word AADASCII adjust for division CBWConvert byte to word CWDConvert word to doubleword

66 Addition related operations MnemonicMeaningFormatOperationFlags affected AddAdditionAdd D, SD = S+D CF = carry OF, SF, ZF, AF, PF, CF ADCAdd with carryADC D, S D = S+D+CF CF = carry OF, SF, ZF, AF, PF, CF INCIncrement by 1INC DD = D+1OF, SF, ZF, AF, PF AAAASCII adjust for addition AAAAF, CF, OF, SF, ZF, PF undefined DAADecimal adjust for addition DAASF, ZF, AF, PF, CF, OF undefined DestinationSource Register Memory Register Immediate MemoryImmediate AXImmediate

67 Subtraction MnemonicMeaningFormatOperationFlags affected SubSubtractSub D,SD = D-S CF = borrow OF, SF, ZF, AF, PF, CF SbbSubtract with borrow SBB D,SD = D-S-CFOF, SF, ZF, AF, PF, CF DecDecrement by 1DEC DD=D-1OF, SF, ZF, AF, PF NegNegateNeg DD=0-D CF =1 OF, SF, ZF, AF, PF, CF DASDecimal adjust for subtraction DASOF, SF, ZF, AF, PF, CF undefined AASASCII adjust for subtraction AASOF, SF, ZF, AF, PF, CF undefined

68 Subtraction operands DestinationSource Register Memory Register AXImmediate RegisterImmediate Memoryimmediate

69 Example If BX = 3A NEG BX Give FFC6 NEG – make the operand negative (2’s complement) Executing the NEG instruction causes the following 2’s complement subtraction 00 - (BX) = 0000 + 2’s complement of 3A = 0000 + FFC6 = FFC6

70 Multiplication When multiplying 8-bit data, result is 16-bit and stored in AX When multiplying 16-bit data, result is 32-bit and result stored in AX and DX The AX holds the LSB and DX MSB Only the source operand is specified and the other operand is in AL, or AX. This is also the same in division In division, AH is the remainder and AL is the quotient For 16-bit, AX contains the quotient and DX contains the remainder

71 Multiplication and division functions MnemonicMeaningFormatOperationFlags affected MULMultiply (Unsigned) MUL SAX = AL*S8 DX,AX = AX*S16 OF, CF, SF, ZF, AF, PF undefined DIVDivision (unsigned) DIV SAL = Q (AX/S8) AH = R(AX/S8) OF, CF, SF, ZF, AF, PF undefined IMULInteger multiply (signed) IMUL SAX = AL*S8 DX,AX=AX*S16 OF, CF, SF, ZF, AF, PF undefined IDIVInteger divide (signed) IDIV SAX = Q(AX/S8) AH=R(AX/S8) AX = Q(DX,AX)/S16 DX=R(DX,AX)/S16 If Q is positive and exceeds 7FFF or if Q is negative and becomes less than 8001 then type 0 interrupt occurs OF, CF, SF, ZF, AF, PF undefined

72 Multiplication related functions MnemonicMeaningFormatOperationFlags affected AAMAdjust AL for multiplication Ascii adjust after Multiplication for BCD values AAMAH=Q(AL/10) AL=R(AL/10) SF, ZF, PF, OF, AF, CF undefined AADAdjust AX for division Prepare 2 BCD values for division AADAL=(AH*10+AL ) AH =00 SF, ZF, PF, OF, AF, CF undefined CBWConvert byte to word CBWAll bits of AH = (MSB of AL) None CWDConvert word to double word CWDAll bits of DX = MSB of AX none

73 Example If AL is –1 and CL is –2, what will be the result produced In AX for MUL CL IMUL CL MUL CL is unsigned multiply = FD02 IMUL CL is signed multiply = 2

74 Special functions CBW – convert byte (8-bit) to word (16-bit) CBW – fill AH with 0 if AL is positive; fill AH with 1s if AL is negative then AH becomes FF CWD – convert word (16-bit) to double word (32- bit) and the DX register is used to store the high order word CWD – fill DX with 0 if AL is positive; fill DX with 1s if AX is negative then DX becomes FF Use CBW when doing 8-bit operation Use CWD when doing 16-bit operation

75 Example What is the result of executing the following sequence Of instructions? MOVAL, A1 CBW CWD Ans. AX = FFA1 after CBW DX = FFFF after CWD

76 A simple application Try to write a simple assembly program to convert from Centigrade (Celsius) to Fahrenheit The equation for the conversion is f = c * 9 / 5 + 32 What operations are required? Do you need to define variables?

77 Logic Instructions Logic operations include: AND, OR, exclusive-OR (XOR) and NOT Eg AND AX, BX Result is stored in AX Operation is applied to bits of the operands

78 Exercise Describe the result of executing the following: MOV AL, 01010101B ANDAL, 00011111B (AL = 00010101B) ORAL, 11000000B (AL = 11010101B) XORAL, 00001111B(AL = 11011010B) NOT AL(AL = 00100101B) Ans. AL = 00100101 NOTE: NOT not equal to NEG

79 Application of logical operations If you only want to examine a particular bit in a 8-bit pattern you can do –AND AL, #00010000 The above tries to examine bit 4 of AL After AND check the ZERO flag Z=1 then bit4 =0 else bit4=1 If you want to clear a register to 0 –XOR BL, BL

80 Exercise Write a program to count the number of even numbers included in an array by using: –Logical operation(s)

81 Shift Instructions There are 4 shift operations Can perform: logical shift and arithmetic shift Can shift left as well as right Logical shift – the vacated bit will be filled with ‘0’ Arithmetic shift – the vacated bit will be filled with the original most significant bit (this only applies in right shift, in left shift vacated bit is filled with ‘0’ as well.) Arithmetic shift will maintain the ‘sign’ of the original data If shift more than 1 bit then the number of bits to be shifted is stored in CL

82 Shift left carry If content is 10010011 then after shift Carry = 1 result is 00100110 If content is 10010011 then after shift Carry = 1 result is 01001001 If arithmetic shift then result is 11001001 Shift right carry

83 Shift operations MnemonicMeaningFormatOperationFlags affected SAL/SHLShift arithmetic left/shift logical left SAL/SHL D, Count Shift the (D) left by the number of bit positions equal to count and fill the vacated bits positions on the right with zeros CF, PF, SF, ZF, OF, AF undefined OF undefined if count not equal to 1 SHRShift logical rightSHR D, CountShift the (D) right by the number of bit positions equal to count and fill the vacated bits positions on the left with zeros CF, PF, SF, ZF, OF, AF undefined OF undefined if count not equal to 1 SARShift arithmetic rightSAR D, CountShift the (D) right by the number of bit positions equal to count and fill the vacated bits positions on the left with the original most significant bit CF, PF, SF, ZF, OF, AF undefined OF undefined

84 Rotate Instructions Rotate is similar to shift The vacate bit is filled with the bit rotated out from the other side Rotate left through carry (RCL) – bit rotated out is stored in the carry flag, the vacated bit is filled by the carry flag

85 Rotate 11110000 01111000 01111000 Rotate right After 1 10111100 0 Rotate right thro’ carry After

86 Example of rotate Eg RCRBX, CL ; rotate right thro’ carry If CL = 04 16 and BX = 1234 16 what is the result of the above operation? –1000 0001 0010 0011 if C is 0 at the beginning

87 Rotate Operations MnemonicMeaningFormatOperationFlags affected ROLRotate leftROL D, CountRotate the D left by the number of bit positions equal to Count. Each bit shifted out from the leftmost bit goes back into the rightmost bit position CF OF undefined if count  1 RORRotate right ROR D, CountRotate the D right by the number of bit positions equal to Count. Each bit shifted out from the rightmost bit goes back into the leftmost bit position CF OF undefined if count  1

88 Rotate operation MnemonicMeaningFormatOperationFlags affected RCLRotate left thro’ carry RCL D, CountSame as ROL except carry is attached to D for rotation CF OF undefined if count  1 RCRRotate right thro’ carry RCR D, CountSame as ROL except carry is attached to D for rotation CF OF undefined if count  1

89 Applications of shift/rotate To examine bit 6 of the AL register –RCL AL, 2 To implement a multiply –Shift a pattern to left = x2 –00000100 = 4 after shifting to left 00001000 = 8 –Shift to right = /2 –00000100 after shifting to right 00000010 = 2 3x9 –Binary pattern of 9 = 1001 –3x9 = 3 x 2 3 + 3x2 0 –3x2 3 = shifting pattern of 3 to left 3 times + the original value (shift 0 time) –Binary pattern of 3 00000011 –00011000 (after 3 shift) + 00000011 –Result = 00011011 = ???

90 Exercise If AL = 128, BL = -4 After the following: ADD AL, 3 ADC BL, AL RCL BL, 1 ; this is rotate left thro’ carry, this does not change the ; sign or overflow Q. What will be the carry, sign and overflow flag?

91 Exercise Write a program to count the number of odd numbers included in an array by using: –Shift/rotate operation

92 Exercise AX = 0010HBX = 0020HCX = 0030HDX = 0040H SI = 0100HDI = 0200HCF = 1H DS:100 = 10HDS:101 = 00HDS:120 = FFH DS:121 = FFHDS:130 = 08HDS:131 = 00H DS:150 = 02HDS:151 = 00HDS:200 = 30H DS:201 = 00HDS:210 = 40HDS:211 = 00H DS:220 = 30HDS:221 = 00H

93 ADD AX, 00FF ( AX = 010F H) ADC SI, AX (SI = 0111H) INC BYTE PTR [0100]; Byte ptr indicate the size of memory data addressed by the memory pointer (the value refers to is 10H so it becomes 11H) SUB DL, BL (DL = 40 BL =20 so result = 20H) SBB DL, [0200] (DL = 40H, [0200] refers to 30H so result is 09H ) DEC BYTE PTR [DI+BX] (data refers to by byte ptr [DI+BX] is 30H after DEC = 29H ) NEG BYTE PTR [DI] + 0010 ( NEG 40H = 1100 0000 ) MULDX (10x40 so AX = 0400H DX = 0000H ) IMULBYTE PTR [BX + SI] (AX = 0FF0H, DX = 0000H) DIV BYTE PTR[SI] + 0030 (value refers to by Byte PTR[SI]+0030 is 08H (one byte) so after the division AH = 00 AL = 02) IDIVBYTE PTR [BX][SI]+0030 ( the value refers to is 02H so after div AH =00 AL =08)

94 Exercise 1.How would the decimal number 1234 be coded in ASCII and stored in memory starting at address 0C000H? Assume that least significant digit is stored at the lower addressed memory location 1 = (31H in 0C003H) 2 = (32H in 0C002H) 3 = (33H in 0C001H) 4 = (34H in 0C000H) 2.If register BX contains the value 0100 16, register DI contains 0010 and register DS contains 1075, what physical memory location is swapped when the following instruction is executed XCHG[BX+DI], AX PA = 10750+0100+0010 = 10860H 3.Compute the physical address for the specified operand in each of the following instructions: MOV [DI], AX (destination operand) (0B000+0200 = 0B200) MOVDI, [SI](source operand) (0B000+0100 = 0B100) MOV DI+XYZ, AH (destination operand) (0B000+0200+0400 = 0B600) Given CS=0A00, DS=0B00, SI=0100, DI=0200, BX=0300, XYZ=0400

Download ppt "Assembly language programming Learning assembly language programming will help understanding the operations of the microprocessor To learn: –Need to know."

Similar presentations

Ads by Google