Difference between revisions of "MPLab 32bit Multiplication"

From MKWiki
Jump to navigation Jump to search
Line 46: Line 46:
 
             INT 21H
 
             INT 21H
 
              
 
              
             CMP AL,'A'      ;compares the value in the AL register (the character just read) with the character 'A'.
+
             ;compares the value in the AL register (the character just read) with the character 'A'.
             JGE L5          ; If the character in AL is greater than or equal to 'A', program jumps to Label L5.
+
             CMP AL,'A'     
             SUB AL,30H      ; otherwise, it subtracts 30H from the ASCII value of the character,
+
           
                                  ; converts a numeric character ('0' to '9') to its corresponding numerical value (0 to 9).
+
            ; If the character in AL is greater than or equal to 'A', program jumps to Label L5. This is used to check if the character is an uppercase letter.
 +
            JGE L5     
 +
 
 +
             ; If the character is not an uppercase letter, it subtracts 30H from the ASCII value of the character.  To convert numeric character('0' to '9') to the numerical value (0 to 9)  
 +
            SUB AL,30H     
 +
                                 
 
             JMP L6
 
             JMP L6
 
             L5: SUB AL,37H
 
             L5: SUB AL,37H

Revision as of 00:50, 26 September 2023

32-bit Binary Multiplication

1. Define the model and architecture for the assembly code

.model small 
.stack 100H 
.386          ; specifies that the program will use instructions of the 80386 processor (32-bit instructions).

2. Define your data in the data section ( here you can define various data items: variables, constants, strings, arrays)

.data          ; .data directive indicates the beginning of data section 

; DATA1 and DATA2 are 32-bit variables initialized to 0. 
DATA1 dd 00000000H         
DATA2 dd 00000000H

; PROD1 and PROD2 32-bit uninitialized variables.
PROD1 dd ?           
PROD2 dd ?

;define strings that will be displayed as messages to the user while executing the program.
msg db 10,13,"Enter the First Number: $"
msg1 db 10,13,"Enter the Second Number: $"
msg2 db 10,13,"The Product (in Hexadecimal) is: $"

3. Define your instruction in the code section (here you write the assembly instructions that perform computations, control program flow, and interact with data variables and memory)

.code        ; .code directive indicates the beginning of code section 
.startup     ;  the entry point of the program
; Using DOS interrupt 21H to display the message.
MOV AH,09         
MOV DX,OFFSET msg        
INT 21H  
; Read the First Number and store it into DATA1
MOV EBX, 0     ;sets the value of the EBX register to zero
MOV CX, 8       ;sets the value of the CX register to 8 
; Using Loop
AGAIN: 
             ; Using DOS interrupt 21H to read a character
             MOV AH, 01 
             INT 21H
             
             ;compares the value in the AL register (the character just read) with the character 'A'.
             CMP AL,'A'      
            
             ; If the character in AL is greater than or equal to 'A', program jumps to Label L5. This is used to check if the character is an uppercase letter.
             JGE L5      

             ; If the character is not an uppercase letter, it subtracts 30H from the ASCII value of the character.  To convert numeric character('0' to '9') to the numerical value (0 to 9) 
             SUB AL,30H       
                                  
             JMP L6
             L5: SUB AL,37H
             L6: SHL EBX,4
             ADD BL,AL
             LOOP AGAIN
MOV DATA1, EBX