National Textile University
Department of Computer Science
Lab#12: COAL
LAB SUBMISSION
Instructor: Sir Qadeer
Registration # 23-NTU-CS-1244 Name Ali Ul Murtaza Alvi
Submission Time:
Note Solve the following problems using the concepts we have covered so far
Question: Solve following Questions using Registers in Assembly Language.
And Display the Result.
(Q-01)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov al, 15 ;0000 1111
shl al, 4 ;4-bit shift left = 1111 0000
mov ah, 0 :ah=0000 0000, al=1111 0000
movzx eax, ax
call WriteDec
call DumpRegs
invoke ExitProcess, 0
main ENDP
END main
(Q-02)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov ax, 42 ;0010 1010
shr ax, 1 ;0010 1010 -> 0001 0101 = 21
mov bx, ax
movzx eax, bx
call WriteDec
call Crlf
mov ax, 42 ;0010 1010
and ax, 1 ;0010 1010 AND 1 = 0
movzx eax, ax
call WriteDec
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(Q-03)
(a)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov al, 7Dh ;0111 1101
shr al, 1 ;3E=0011 1110, CF=1
call DumpRegs
movzx eax, al
call WriteHex
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(b)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov al, 7Dh ;0111 1101
shl al, 3 ;E8= 1110 1000, CF=1
call DumpRegs
movzx eax, al
call WriteHex
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(c)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov al, 92h ;1001 0010 -> -110
sar al, 1 ;1001 0010 -> 1100 1001 = -55 = C9
call DumpRegs
movzx eax, al
call WriteHex
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(d)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov al, 92h ;1001 0010
sal al, 3 ;1001 0010 -> 1001 0000 = 90
call DumpRegs
movzx eax, al
call WriteHex
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(Q-04)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
msg1 BYTE "Before ROL: ", 0
msg2 BYTE "After ROL: ", 0
.code
main PROC
mov al, 10101100b
mov edx, OFFSET msg1
call WriteString
movzx eax, al
call WriteBin
rol al, 3 ;1010 1100 -> 0110 0101 CF=1
call Crlf
mov edx, OFFSET msg2
call WriteString
movzx eax, al
call WriteBin
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(Q-05)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
msg1 BYTE "Before ROR: ", 0
msg2 BYTE "After ROR: ", 0
.code
main PROC
mov ax, 0ABCDh ;1010 1011 1100 1101 = ABCD
mov edx, OFFSET msg1
call WriteString
movzx eax, ax
call WriteHex
ror ax, 5 ;1010 1011 1100 1101 -> 0110 1101 0101 1110 = 6D5E
call Crlf
mov edx, OFFSET msg2
call WriteString
movzx eax, ax
call WriteHex
call Crlf
call WriteBin
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(Q-06)
(SCL)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov dx, 0ABCDh ;1010 1011 1100 1101
stc ;CF = 1
call DumpRegs
movzx eax, dx
call WriteHex
call Crlf
call WriteBin
call Crlf
stc
rcl dx, 1 ;1010 1011 1100 1101 -> 0101 0111 1001 1011 = 579B, CF=1
call DumpRegs
movzx eax, dx
call WriteHex
call Crlf
call WriteBin
invoke ExitProcess, 0
main ENDP
END main
(SCR)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov dx, 0ABCDh ;1010 1011 1100 1101
stc ; CF = 1
call DumpRegs
movzx eax, dx
call WriteHex
call Crlf
call WriteBin
call Crlf
stc
rcr dx, 1 ;1010 1011 1100 1101 -> 1101 0101 1110 0110 = D5E6, CF=1
call DumpRegs
movzx eax, dx
call WriteHex
call Crlf
call WriteBin
invoke ExitProcess, 0
main ENDP
END main
(Q-07)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov ax, 1234h ;0001 0010 0011 0100
mov bx, 5678h ;0101 0110 0111 1000
shrd ax, bx, 16 ;0101 0110 0111 1000
movzx eax, ax
call WriteHex
call Crlf
invoke ExitProcess, 0
main ENDP
END main
(Q-08)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov eax, 12345678h
mov ebx, 87654321h
add eax, ebx
call DumpRegs
call Crlf
adc ebx, 0
call DumpRegs
call Crlf
call WriteDec
invoke ExitProcess, 0
main ENDP
END main
(Q-09)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
.code
main PROC
mov ax, 1234h
mov bx, 5678h
sub ax, bx
call DumpRegs
call Crlf
sbb bx, 0
call DumpRegs
call Crlf
call WriteDec
invoke ExitProcess, 0
main ENDP
END main
(Q-10)
Code:
INCLUDE [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
INCLUDELIB [Link]
.data
var1 DWORD 20
var2 DWORD 10
var3 DWORD 5
var4 DWORD ?
.code
main PROC
mov eax, var1
mov ebx, var2
mul ebx ;20 * 10 = 200
mov ebx, var2
sub ebx, var3 ;10 - 5 = 5
div ebx ;200/5 = 40
mov var4, eax
call WriteDec
call Crlf
invoke ExitProcess, 0
main ENDP
END main