1 / 54

Review of Assembly language

Review of Assembly language. Recalling main concepts. Recalling main concepts. Segment: special areas defined to contain CODE, DATA and STACK Paragraph boundary: location evenly divisible by 16 or 10H. Recalling main concepts. Stack Segment. SS. Data Segment. DS. CS. Code Segment.

lois
Download Presentation

Review of Assembly language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Review of Assembly language

  2. Recalling main concepts

  3. Recalling main concepts • Segment: special areas defined to contain CODE, DATA and STACK • Paragraph boundary: location evenly divisible by 16 or 10H

  4. Recalling main concepts Stack Segment SS Data Segment DS CS Code Segment Segment Registers

  5. Example program ; Add two numbers and store the results into the third variable page 60,132 TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; ----------------------------------------------- CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG ;Set address of data MOV DS,AX ; segment in DS MOV AX,FLDD ;Move 0215 to AX ADD AX,FLDE ;Add 0125 to AX MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program

  6. COMMENTS ; Add two numbers and store the results into the third variable page 60,132 TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; ----------------------------------------------- CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG;Set address of data MOV DS,AX;Segment in DS MOV AX,FLDD;Move 0215 to AX ADD AX,FLDE;Add 0125 to AX MOV FLDF,AX;Store sum in FLDF MOV AX,4C00H;End processing INT 21H MAIN ENDP;End of procedure CODESEG ENDS;End of segment END MAIN;End of program Comments ; <your comments>

  7. IDENTIFIERS ; Add two numbers and store the results into the third variable page 60,132 TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; ----------------------------------------------- CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG ;Set address of data MOV DS,AX ;Segment in DS MOV AX,FLDD ;Move 0215 to AX ADD AX,FLDE ;Add 0125 to AX MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program

  8. Identifiers IDENTIFIERS • Identifier is a name applied to an item in a program to reference • Name (e.g: FLDD DW 215) • Label (e.g: MAIN PROC FAR) • Identifiers must not a reserved word and only contain: • Alphabetic letters (A-Z,a-z) • Digits (0-9) • ?,_,$,@,dot (.) (but not for the first character) • Maximum length is 247

  9. RESERVED WORDS • Instructions: ADD, MOV • Directives: .TITLE, .MODEL • Operators: FAR, SIZE • Pre-defined symbols: @Data, @Model • Register: AX,BX

  10. STATEMENT • Instructions: are translated to object code MOV, ADD, LEA.. • Directives: tell the assembler to perform a specific action. [identifier] operation [operand(s)] [;comments]

  11. STATEMENTS ; Add two numbers and store the results into the third variable page 60,132 TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; ----------------------------------------------- CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG ;Set address of data MOV DS,AX ;Segment in DS MOV AX,FLDD ;Move 0215 to AX ADD AX,FLDE ;Add 0125 to AX MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program

  12. Directives • Control the way a source program assembles and lists • Generate no machine code (unlike instructions which generate object code)

  13. Segment directive ; Add two numbers and store the results into the third variable page 60,132 TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; ----------------------------------------------- CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG ;Set address of data MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program

  14. Segment directive Name OperationOperand Segment-nameSEGMENT[align][combine] [`class’] Segment-name ENDS Example: STACKSEGMENTPARA STACK 'Stack‘ STACKENDS

  15. PROC directive ; Add two numbers and store the results into the third variable page 60,132 TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; ----------------------------------------------- CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG ;Set address of data MOV DS,AX ;Segment in DS MOV AX,FLDD ;Move 0215 to AX MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program

  16. PROC directive • Format: Procedure-name PROC Operand Comment Procedure-name ENDP Operand: relates to program execution (FAR)

  17. ASSUME directive ; Add two numbers and store the results into the third variable page 60,132 TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; ----------------------------------------------- CODESEG SEGMENT PARA 'Code' MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG ;Set address of data MOV DS,AX ;Segment in DS MOV AX,FLDD ;Move 0215 to AX MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program

  18. ASSUME directive • Tells the assembler the purpose of each segment in the program Example: ASSUME SS:STACK,DS:DATASEG,CS:CODESEG

  19. Simplified Segment Directives • Model memory-model # Code segment #Data segment Small: 1, <=64K 1,<=64K Medium: any number,size 1, <=64K Compact: 1, <=64K any number,size Large: any number,sizeany number,size Huge: any number,sizeany number,size

  20. Simplified Segment Directives • STACK [size] (default: 1K) • DATA (default size is 1K) • CODE (default size is 1K) • .EXIT directive

  21. EQUATE directives • Equal-Sign directive COEFFICIENT= 100 • EQU directive COEFFICIENT EQU 100

  22. Data type • Format for data definition [name] Dn expression Name: identifier Dn: Directives and can be: DB: byte DF:farword DW: word DQ:quadword DD: doubleword DT:tenbytes Expression: can be unnitialized: ? can be assigned a constant: such as 25, 21. Example: • DATAZ DB 21,22.. • DW 10 DUP(?)

  23. Data type • Constant: • String: is defined within ‘ ‘ or “ “ MESSAGE DB “I am learning assembly language” • Numeric: • Is stored in reverse sequence • Binary: 01B • Decimal: 9D( D is optional) • Hexadecimal: 1FH • Real: 12R

  24. Directives for defining Data • Byte: DBWord: DW Doubleword: DD Farword: DF Quadword: DQ Tenbytes: DT

  25. Some instructions on arithmetic calculation • ADD: ADD register register/memory/immediate Example: ADD AX,FLDE • Subtract SBB register register/memory/immediate Example: SUB AX, 100 • Multiplication IMUL register Example: IMUL CX • Division DIV register Example DIV CX

  26. Data transfer instructions • MOV instruction • Transfers data referenced by the address of the second operand to the address of the first operand • Destination has to have the same length as source [label:] MOV register/memory register/memory/immediate Example: MOV F, AX ; // Move content of AX to the variable F MOV CX, D ;// Move value of D to CX MOV ES, AX MOV AX, 215

  27. Note • MOV instruction can’t: • set the value of the CS and IP registers. • copy value of one segment register to another segment register (should copy to general register first). • MOV ES, DS • copy immediate value to segment register (should copy to general register first). • MOV DS, 100 • MOV instruction can’t: • set the value of the CS and IP registers. • copy value of one segment register to another segment register (should copy to general register first). • MOV ES, DS • copy immediate value to segment register (should copy to general register first). • MOV DS, 100

  28. MOVSB and MOVSW • MOVSB: Copy byte at DS:[SI] to ES:[DI]. Update SI and DI.Algorithm: ES:[DI] = DS:[SI] if DF = 0 then SI = SI + 1 DI = DI + 1 else SI = SI - 1 DI = DI - 1 DF: direction flag from the flag register

  29. MOVSB and MOVSW • MOVSW: Copy word at DS:[SI] to ES:[DI]. Update SI and DI. ES:[DI] = DS:[SI] if DF = 0 then SI = SI + 2 DI = DI + 2 else SI = SI - 2 DI = DI - 2 DF: direction flag from the flag register

  30. XCHG instruction • XCHG swap the two data items [label:] XCHG register/memory, register/memory Example: MOV AL, 5 MOV AH, 2 XCHG AL, AH ; AL = 2, AH = 5 XCHG AL, AH ; AL = 5, AH = 2

  31. LEA instruction • Load Effective Address. REG = address of memory (offset) [label:] LEA register/memory Example: LEA AX, m ;load offset address of m to AX

  32. Arithmetic instructions • INC and DEC instruction • Increasing or decreasing the contents of register or memory location by 1 [label:] INC/DEC register/memory Flag: OF, SF and ZF OF:is set when an instruction resulted in a carry into the sign bit of the result. SF: is set if the sign bit of a result is set ZF: is set if the result is equal to 0.

  33. Arithmetic instructions • ADD [label:] ADD/SUB operand1, operand 2 operand1 =operand 1 + operand 2 Operand 1: register/memory Operand 2: register/memory/immediate

  34. Arithmetic instructions • SUB [label:] SUB operand1, operand 2 operand1 =operand 1 - operand 2 operand 1: register/memory operand 2: register/memory/immediate

  35. Arithmetic instructions • MUL operand Unsigned multiply. Operand: register/memory

  36. Arithmetic instructions • IMUL operand Signed multiply. Operand: register/memory Example: MOV AX, -2 MOV CX, -3 IMUL CX ; AX = +6 CF = 0

  37. Arithmetic instructions • DIV operand Unsigned multiply. Operand: register/memory when operand is a byte:AL = AX / operandAH = remainder (modulus) when operand is a word:DX = remainder (modulus)

  38. Arithmetic instructions • IDIV operand Signed multiply. Operand: register/memory when operand is a byte:AL = AX / operandAH = remainder (modulus) when operand is a word:DX = remainder (modulus)

  39. Repetitive move instructions TITLE A04ASM1 (EXE) Move and add operations ; --------------------------------------------- STACK SEGMENT PARA STACK 'Stack' DW 32 DUP(0) STACK ENDS ; ---------------------------------------------- DATASEG SEGMENT PARA 'Data' STRING1 DW "12345678","$" STRING2 DW ? DATASEG ENDS

  40. Repetitive move instructions MAIN PROC FAR MOV AX, dataseg MOV DS, AX MOV ES, AX MOV CX, 09 ; Initialize to move 9 characters LEA SI, STRING1 ; Initialize source index register to offset of string 1 LEA DI, STRING2 ; Initialize destination index register to offset of string 2 BEGINLOOP: MOV AL,[SI] ; Get a current character from string 1 to AL MOV [DI], AL ; Move it to the current character in string 2 INC SI ; Move to the next character in string 1 INC DI ; Move to the next character in string 2 DEC CX ; Decrease the count for loop JNZ BEGINLOOP ; Continue to loop if count is not 0 MOV AH, 09H LEA DX, STRING2 int 21H ; Display String 2 MAIN ENDP ;End of procedure END MAIN ;End of program CODESEG ENDS

  41. Result

  42. Repetitive move instructions • DEC CX ZF = 1 if CX = 0 • JNZ LABEL if ZF = 0 then jump to the label

  43. Addressing mode • Register addressing: E.g ADD AX, BX fastest type of operations • Immediate addressing Immediate contains a constant value or an expression E.g: MOV AX, 0245H • Direct memory addressing One of operand references a memory location and the other operand references a register E.G MOV FLDF, AX

  44. Addressing mode • Direct-Offset addressing use arithmetic instruction to modify an address e.g MOV CX, DATAZ+2 • Indirect memory addressing Use BX and BP, DI and SI within [ ] e.g. MOV [BX], CL

  45. Addressing mode Base Displacement Addressing Uses BX, BP and DI, SI and combine with a displacement to form an effective address E.g MOV AL,[SI+2] Base-Index Addressing Combine BX,BP with DI,SI to form effective address E.G MOV AL,[BX+SI]

  46. Addressing mode Base-Index Displacement Addressing Combine BX, BP and DI, SI and a displacement to form an effective address E.g MOV AL,[BX+SI+2]

  47. NEAR and FAR address NEAR address consists of 16 bit offset portion of an address used in real mode FAR address consists of both the segment and offset portions in the form of 32 bit segment:offset

  48. CMP Instruction • [label:] CMP register/memory, register/memory/immediate • Compares the first to the second operand • Affects: AF, CF, OF, PF, SF and ZF flag CMP AX, DX JE Startloop

  49. Conditional Jump instructions • Jump based on unsigned data [label:] JE/JZ short-address Jump if equal or Jump if zero [label:] JNE/JNZ short-address Jump if not equal or Jump if not zero Flag: ZF

  50. Example MOV AL, 5 CMP AL, 5 JE label1 JMP exit label1: MOV CX, BX exit: …..

More Related