390 likes | 504 Views
Executing and Linking an assembly program. Lesson plan. Review Program logic and control Practice exercise Assembling, Linking and Executing Programs Practice exercise. Review. IMUL register/memory If operand is a byte AX= AL * operand. Review. MOV CX, 10 BEGINLOOP DEC CX
E N D
Lesson plan • Review • Program logic and control • Practice exercise • Assembling, Linking and Executing Programs • Practice exercise
Review • IMUL register/memory If operand is a byte AX= AL * operand
Review MOV CX, 10 BEGINLOOP DEC CX JNZ BEGINLOOP OR MOV CX, 10 BEGINLOOP LOOP BEGINLOOP
Program logic and control • Address: distance from the current address • Short: distance from -128 to 127 bytes • Near: -32768 to 32767 bytes • Far: distance over 32K for the same segment address or in another segment
Transfer operations • JMP Unconditional. Transfer control under all circumstances Syntax: [label:] JMP short/near/far address
Transfer operations • Backward jump BEGINLOOP: …. JMP BEGINLOOP Forward jump JMP STARTLOOP STARTLOOP: ….
Practice with JMP instruction Write a program to continuously add 1 to AX and add AX to BX (Initially, assign AX and BX any values)
Loop instruction • Loops a specified number of times Initial value is stored in CX Each iteration, LOOP deducts 1 from CX. If CX is not zero, control jumps to the address specified Otherwise, finish the loop • Syntax: [label:] LOOP short-address
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
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
Example MOV AL, 5 CMP AL, 5 JE label1 JMP exit label1: MOV CX, BX exit: …..
Conditional Jump instructions JG: Jump if first operand is Greater then second operand (as set by CMP instruction). Signed. if (ZF = 0) and (SF = OF) then jump Syntax: [label:] JG short-address
Example MOV AL, 5 CMP AL, -5 JG label1 JMP exit label1: MOV CX, -5 ; in this case AL > -5 exit:
Conditional Jump Instruction • JL: Jump if first operand is Less then second operand (as set by CMP instruction). Signed. • if SF <> OF then jump • Syntax: [label:] JL short-address
Example MOV AL, -2 CMP AL, 5 JL label1 JMP exit label1: MOV CX, 5 ; in this case AL < 5 exit: …
Practice • Write a program to compute sum of even integers from 1 to 100 using LOOP
Conditional Jump instructions JB/JNAE [label:] JB/JNAE short-address Jump Above/Equal or Jump Not Above/Equal Flag: ZF
Conditional Jump instructions JBE/JNA [label:] JBE/JNA short-address Jump Below/Equal or Jump Not Above Flag: AF, ZF
Special Arithmetic Test • JCXZ: Jump if CX is zero • JC: Jump if carry • JNC: Jump if no carry • JO: Jump if overflow • JNP: Jump if no overflow
Practice • Write a program that adds each value defined in BYTE_TBL and store the sum in BYTE_TOTAL BYTE_TBL DB 0,5,6,4,9,7 BYTETOTAL DB 0
Assembling, Linking and Executing Programs Assembling: translate sourse program (written in assembly language) into machine code (object code) Linking: complete machine code for the object program, generate an executable module
Create *.asm Assemble *.asm And create *.obj Assembler Link And create *.exe Linker Assembling, Linking and Executing Programs Editor
Assembling a Source Program • Converts your source code into machine code and displays any errors. Assembling *.obj, *.lst, *.crf *.asm
Example ; 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
Example =================================================================================================== [LINE] LOC: MACHINE CODE SOURCE =================================================================================================== [ 1] : ; Add two numbers and store the results into the third variable [ 2] : page 60,132 [ 3] : TITLE A04ASM1 (EXE) Move and add operations [ 4] : ; --------------------------------------------- [ 5] : STACK SEGMENT PARA STACK 'Stack' [ 6] 0000: 00 00 00 00 00 00 00 00 00 00 00 00 DW 32 DUP(0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 7] : STACK ENDS [ 8] : ; ---------------------------------------------- ===================================================================================================
Example =================================================================================================== [LINE] LOC: MACHINE CODE SOURCE =================================================================================================== [ 9] : DATASEG SEGMENT PARA 'Data' [ 10] 0040: D7 00 FLDD DW 215 [ 11] 0042: 7D 00 FLDE DW 125 [ 12] 0044: 00 00 FLDF DW ? [ 13] : DATASEG ENDS [ 14] : ; -----------------------------------------------
Example =================================================================================================== [LINE] LOC: MACHINE CODE SOURCE =================================================================================================== [ 16] 0050: MAIN PROC FAR [ 17] : ASSUME SS:STACK,DS:DATASEG,CS:CODESEG [ 18] 0051: B8 04 00 MOV AX,DATASEG [ 19] 0054: 8E D8 MOV DS,AX [ 20] 0056: A1 00 00 MOV AX,FLDD [ 21] 0059: 03 06 02 00 ADD AX,FLDE [ 22] 005D: A3 04 00
Linking an Object Program • Combines more than one assembled module into one executable program • Generates an EXE module and initializes it with special instructions to facilitate its subsequent loading for execution
Linking an Object Program • *.map START STOP LENGTH NAME CLASS 00000H 0003FH 0040H STACK STACK 00040H 00045H 0006H DATASEG DATA 00050H 00063H 0014H CODESEGCODE Program entry at 0005:0000
Procedures • Procedure is a part of code that can be called from your program in order to make some specific task. makes program more structural and easier to understand. returns to the same point from where it was called. Syntax: name PROC ; the code of the procedure ... RET name ENDP
Procedures • CALL instruction is used to call a procedure • CALL is used to transfer controls • RET is used to end execution of procedure Syntax: [label:] CALL procedure [label:] RET [immediate]
Example CALL m1 MOV AX, 2 RET ; return to operating system. m1 PROC MOV BX, 5 CALL m2 RET ; return to caller. m1 ENDP m2 PROC MOV CX, 10 RET; return to caller m2 ENDP
Procedure • NEAR: intra-segment procedure • FAR PROC: inter-segment procedure
Program execution and Stack • CALL and PUSH store one word address or value onto stack • RET and POP pop and stack and access the previously pushed word
Practice exercise • Code a procedure using LOOP that calculate Fibonaci series: 1,1,2,3,5,8,13.. Limits to 7 loops Each number is the sum of the preceding two numbers AX should store the current Fibonaci number Call this procedure from the main program
Practice exercise • Basic coding in assembly language