.model small .stack 64 .data ;SYSTEM CONFIG default_left_space db " $" login_password db "password" ;SYSTEM DATA password dw ? binaryX db 9 Dup ("$") binaryY db 9 Dup ("$") binaryZ db 9 Dup ("$") hexZ db 3 Dup ("$") decZ db 4 Dup ("$") input db ? continue db ? count db "0" cxstore dw ? bin db 8h, 4h, 2h, 1h, 8h, 4h, 2h, 1h binhex db 80h, 40h, 20h, 10h, 8h, 4h, 2h, 1h menu_title db "+ Logical Operators menu + Count: $" menu_bar db "============================$" menu_1 db "1. x AND y$" menu_2 db "2. x OR y$" menu_3 db "3. x XOR y$" menu_4 db "4. NOT x$" menu_5 db "5. Exit Program$" prompt_choice db "Select the operation (1-5): $" prompt_continue db "Do you wish to Continue (Y/N)? $"; error_choice db "Error Message: Please enter 1-5 digit only $" error_continue db "Error Message: Please enter Y or N only $" result_title db "===== OPERATION RESULT =====$" result_binary db "Binary > $" result_decimal db "Decimal > $" result_hex db "Hexadecimal > $" xandy_title db "+ Operator x AND y +$" xory_title db "+ Operator x OR y +$" xxory_title db "+ Operator x XOR y +$" notx_title db "+ Operator NOT x +$" enter_binaryX db "Enter binary numbers of X > $" enter_binaryY db "Enter binary numbers of Y > $" enter_error db "Error Message: The binary number just only have 1 and 0.$" exit_title db "+ Thank You For Using +$" exit_text1 db "AACS3064 Computer System Architecture Assignment Group:$" exit_text2 db "1. Lim Teck Wei$" exit_text3 db "2. Lee Swee Tiang$" exit_text4 db "3. Chong Chee Seng$" exit_text5 db "4. Koh Cern Aun$" .code MAIN PROC MOV AX, @data MOV DS, AX jmp startUI __DISPLAY_XANDY: inc count call __CLEAR_ALL call __DISPLAY_LINE mov ah, 09h lea dx, xandy_title int 21h call __DISPLAY_LINE ret __DISPLAY_XORY: inc count call __CLEAR_ALL call __DISPLAY_LINE mov ah, 09h lea dx, xory_title int 21h call __DISPLAY_LINE ret __DISPLAY_XXORY: inc count call __CLEAR_ALL call __DISPLAY_LINE mov ah, 09h lea dx, xxory_title int 21h call __DISPLAY_LINE ret __DISPLAY_NOTX: inc count call __CLEAR_ALL call __DISPLAY_LINE mov ah, 09h lea dx, notx_title int 21h call __DISPLAY_LINE ret __INPUT_BINARYX: jmp start_inputx error_inputx: call __NEXTLINE mov ah, 09h lea dx, enter_error int 21h start_inputx: call __NEXTLINE mov ah, 09h lea dx, enter_binaryX int 21h mov cx, 8; mov SI, 0; loop_inputx: mov ah, 01h int 21h cmp al, "1" jg error_inputx cmp al, "0" jl error_inputx mov [binaryX+SI], al inc SI loop loop_inputx ret __INPUT_BINARYY: jmp start_inputy error_inputy: call __NEXTLINE mov ah, 09h lea dx, enter_error int 21h start_inputy: call __NEXTLINE mov ah, 09h lea dx, enter_binaryY int 21h mov cx, 8; mov SI, 0; loop_inputy: mov ah, 01h int 21h cmp al, "1" jg error_inputy cmp al, "0" jl error_inputy mov [binaryY+SI], al inc SI loop loop_inputy ret __PROCESS_XANDY: mov cx, 8 mov bx, 0 operation_xandy: mov dl, [binaryX+bx] and dl, [binaryY+bx] mov [binaryZ+bx], dl inc bx loop operation_xandy ret __PROCESS_XORY: mov cx, 8 mov bx, 0 operation_xory: mov dl, [binaryX+bx] or dl, [binaryY+bx] mov [binaryZ+bx], dl inc bx loop operation_xory ret __PROCESS_XXORY: mov cx, 8 mov bx, 0 operation_xxory: mov dl, [binaryX+bx] xor dl, [binaryY+bx] add dl, 30h mov [binaryZ+bx], dl inc bx loop operation_xxory ret __PROCESS_NOTX: mov cx, 8 mov bx,0 operation_notx: mov dl, [binaryX+bx] not dl add dl, 62h mov [binaryZ+bx], dl inc bx loop operation_notx ret __PROMPT_CONTINUE: prompt_continue_repeat: call __NEXTLINE mov ah, 09h lea dx, prompt_continue int 21h mov ah, 01h int 21h cmp al, "y" je prompt_yes cmp al, "Y" je prompt_yes cmp al, "n" je prompt_no cmp al, "N" je prompt_no call __NEXTLINE mov ah, 09h lea dx, error_continue int 21h jmp prompt_continue_repeat prompt_yes: mov continue, 1 ret prompt_no: mov continue, 0 ret __RESULT_DEC: mov bl, 0h mov SI, 0 mov cx, 8 loopcalcdec: cmp [binaryZ+SI], "1" jne skipadddec mov al, [binhex+SI] add bl, al skipadddec: inc SI loop loopcalcdec mov [decZ+0], " " mov [decZ+1], " " mov [decZ+2], "0" loopgetdec: cmp bl, 0h je finishgetdec sub bl, 1h mov al, [decZ+2] inc al cmp al, 3ah jne noCarry mov al, "0" mov ah, [decZ+1] cmp ah, " " jne noSpace mov ah, "0" noSpace: inc ah cmp ah, 3ah jne no2Carry mov ah, "0" mov bh, [decZ+0] cmp bh, " " jne no2Space mov bh, "0" no2Space: inc bh mov [decZ+0], bh no2Carry: mov [decZ+1], ah noCarry: mov [decZ+2], al jmp loopgetdec finishgetdec: ret __RESULT_HEX: mov cx, 2 mov SI, 0 mov DI, 0 loopprinthex: mov cxstore, cx mov cx, 4 mov bx, 0 loopcalchex: mov al, [binaryZ+SI] cmp al, "1" jne skipadd mov al, [bin+SI] add bl, al skipadd: inc SI loop loopcalchex add bl, 30h cmp bl, 3Ah jnge notafhex add bl, 7h notafhex: mov [hexZ+DI], bl inc DI mov cx, cxstore loop loopprinthex ret __PROCESS_RESULT: call __RESULT_HEX call __RESULT_DEC call __NEXTLINE call __NEXTLINE mov ah, 09h lea dx, result_title int 21h call __NEXTLINE mov ah, 09h lea dx, result_binary int 21h mov ah, 09h lea dx, binaryZ int 21h call __NEXTLINE mov ah, 09h lea dx, result_decimal int 21h mov ah, 09h lea dx, decz int 21h call __NEXTLINE mov ah, 09h lea dx, result_hex int 21h mov ah, 09h lea dx, hexz int 21h call __NEXTLINE ret __CLEAR_ALL: mov ah, 6; mov al, 0 ;whole screen mov bh, 7; mov cx, 0 ; mov dl, 79; (since it is 80, i know you know) mov dh, 24; (and this dimension should be 24) int 10h ; (make an interrupt ) MOV AH,2 MOV BH,0 MOV DH,0 MOV DL,0 INT 10H call __NEXTLINE call __NEXTLINE ret __NEXTLINE: mov ah, 02h mov dl, 0ah int 21h mov dl, 0dh int 21h mov ah, 09h lea dx, default_left_space int 21h ret __DISPLAY_LINE: call __NEXTLINE mov ah, 09h lea dx, menu_bar int 21h call __NEXTLINE ret __DISPLAY_MENU: call __CLEAR_ALL call __DISPLAY_LINE mov ah, 09h lea dx, menu_title int 21h MOV al, count sub al, 30h cbw mov bl,10 DIV bl add ax,3030h mov bx,ax mov ah,02h mov dl,bl int 21h mov dl,bh int 21h call __DISPLAY_LINE mov ah, 09h lea dx, menu_1 int 21h call __NEXTLINE mov ah, 09h lea dx, menu_2 int 21h call __NEXTLINE mov ah, 09h lea dx, menu_3 int 21h call __NEXTLINE mov ah, 09h lea dx, menu_4 int 21h call __NEXTLINE mov ah, 09h lea dx, menu_5 int 21h call __NEXTLINE menu_enter: call __NEXTLINE mov ah, 09h lea dx, prompt_choice int 21h mov ah, 01h int 21h mov input, al cmp input, "1" je operator_XandY cmp input, "2" je operator_XorY cmp input, "3" je operator_XxorY cmp input, "4" je operator_notX cmp input, "5" je exitprogram call __NEXTLINE call __NEXTLINE mov ah, 09h lea dx, error_choice int 21h jmp menu_enter ret startUI: backMenu: call __DISPLAY_MENU operator_XandY: call __DISPLAY_XANDY call __INPUT_BINARYX call __INPUT_BINARYY call __PROCESS_XANDY call __PROCESS_RESULT call __PROMPT_CONTINUE cmp continue, 1 je operator_XandY jmp backMenu operator_XorY: call __DISPLAY_XORY call __INPUT_BINARYX call __INPUT_BINARYY call __PROCESS_XORY call __PROCESS_RESULT call __PROMPT_CONTINUE cmp continue, 1 je operator_XorY jmp backMenu operator_XxorY: call __DISPLAY_XXORY call __INPUT_BINARYX call __INPUT_BINARYY call __PROCESS_XXORY call __PROCESS_RESULT call __PROMPT_CONTINUE cmp continue, 1 je operator_XxorY jmp backMenu operator_notX: call __DISPLAY_NOTX call __INPUT_BINARYX call __PROCESS_NOTX call __PROCESS_RESULT call __PROMPT_CONTINUE cmp continue, 1 je operator_notX jmp backMenu exitprogram: call __CLEAR_ALL call __DISPLAY_LINE mov ah, 09h lea dx, exit_title int 21h call __DISPLAY_LINE call __NEXTLINE mov ah, 09h lea dx, exit_text1 int 21h call __NEXTLINE call __NEXTLINE mov ah, 09h lea dx, exit_text2 int 21h call __NEXTLINE mov ah, 09h lea dx, exit_text3 int 21h call __NEXTLINE mov ah, 09h lea dx, exit_text4 int 21h call __NEXTLINE mov ah, 09h lea dx, exit_text5 int 21h call __NEXTLINE call __NEXTLINE MOV ah, 4ch int 21h MAIN ENDP END MAIN