Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Shahid Khaliq
00018
1|Page
LAB No.3 Objective: The aim of this lab is to learn about flags, their working and their use in jump instruction in Assembly Language. The use of flags and jumps to execute certain parts of the code while ignoring others.
Exercise 1: Write an Assembly Language program that will use the conditions: 1. 2. 3. 4. JMP JE JA JB
Ask User to input in variables varA, varB, var1, var2, var3 If(varA=varB) Finalv = (var1-var2)-var3 If(varA>varB) Finalv =var1+var2+var3 If(varA<varB) Finalv =(var1-var2)+var3
2|Page
Solution:
include irvine32.inc .data varA WORD ? varB WORD ? var1 WORD ? var2 WORD ? var3 WORD ? Result WORD ? string1 BYTE "Enter the value of VarA ", 0 string2 BYTE "Enter the value of VarB ", 0 string3 BYTE "Enter the value of Var1 ", 0 string4 BYTE "Enter the value of Var2 ", 0 string5 BYTE "Enter the value of Var3 ", 0 rstring BYTE "The result is: ", 0 .CODE MAIN PROC Movedx,offset string1 Call writestring Call readint MovvarA,ax Movedx,offset string2 Call writestring Call readint MovvarB,ax Movedx,offset string3 Call writestring Call readint Mov var1,ax Movedx,offset string4 Call writestring Call readint Mov var2,ax Movedx,offset string5 Call writestring Call readint Mov var3,ax mov ax, varA cmp ax, varB je equal ja above jb below equal: mov ax, var1 Sub ax, var2 Sub ax, var3 Mov Result, ax Movedx,offsetrstring Call writestring Call writedec callDumpRegs jmp Finish above: mov ax, var1 Add ax, var2 Add ax, var3 Mov Result, ax Movedx,offsetrstring Call writestring Call writedec callDumpRegs jmp Finish below: mov ax, var1 Sub ax, var2 Add ax, var3 Mov Result, ax Movedx,offsetrstring Call writestring Call writedec callDumpRegs jmp Finish Finish: exit main ENDP END main
3|Page
Exercise 2: Modify the above program for signed inputs when varA and varB are signed.
include irvine32.inc .data varA SWORD ? varB SWORD ? var1 WORD ? var2 WORD ? var3 WORD ? Result SWORD ? string1 BYTE "Enter the value of VarA ", 0 string2 BYTE "Enter the value of VarB ", 0 string3 BYTE "Enter the value of Var1 ", 0 string4 BYTE "Enter the value of Var2 ", 0 string5 BYTE "Enter the value of Var3 ", 0 rstring BYTE "The result is: ", 0 .CODE MAIN PROC Movedx,offset string1 Call writestring Call readint MovvarA,ax Movedx,offset string2 Call writestring Call readint MovvarB,ax Movedx,offset string3 Call writestring Call readint Mov var1,ax Movedx,offset string4 Call writestring Call readint Mov var2,ax Movedx,offset string5 Call writestring Call readint Mov var3,ax mov ax, varA cmp ax, varB je equal jg above jl below equal: mov ax, var1 Sub ax, var2 Sub ax, var3 Mov Result, ax Movedx,offsetrstring Call writestring Call writeint callDumpRegs jmp Finish above: mov ax, var1 Add ax, var2 Add ax, var3 Mov Result, ax Movedx,offsetrstring Call writestring Call writeint callDumpRegs jmp Finish below: mov ax, var1 Sub ax, var2 Add ax, var3 Mov Result, ax Movedx,offsetrstring Call writestring Call writeint callDumpRegs jmp Finish Finish: exit main ENDP END main
4|Page
Conclusion:
Flags are 1 bit indicators that can be used to execute certain jump conditions in order to perform different tasks. It is similar to the working of condition statements. Jump can be both conditional and unconditional and can be used according to the needs. Flags are used to indicate carry, zero conditions e.t.c and are very useful in assembly language.
5|Page