Difference between revisions of "MPLab 32bit Multiplication"

From MKWiki
Jump to navigation Jump to search
Line 40: Line 40:
 
MOV EBX, 0    ;sets the value of the EBX register to zero
 
MOV EBX, 0    ;sets the value of the EBX register to zero
 
MOV CX, 8      ;sets the value of the CX register to 8  
 
MOV CX, 8      ;sets the value of the CX register to 8  
 +
; Using Loop
 
AGAIN:  
 
AGAIN:  
            ; Loop body
 
           
 
 
             ; Using DOS interrupt 21H to read a character
 
             ; Using DOS interrupt 21H to read a character
 
             MOV AH, 01  
 
             MOV AH, 01  
 
             INT 21H
 
             INT 21H
 
              
 
              
             CMP AL,'A'
+
             CMP AL,'A'         ;compares the value in the AL register (the character just read) with the character 'A'.
             JGE L5
+
             JGE L5               ; If the character in AL is greater than or equal to 'A', program jumps to Label L5.
             SUB AL,30H
+
             SUB AL,30H       ; If the character is not an uppercase letter, it subtracts 30H from the ASCII value of the character,
 +
                                        ; This converts a numeric character ('0' to '9') to its corresponding numerical value (0 to 9).
 
             JMP L6
 
             JMP L6
 
             L5: SUB AL,37H
 
             L5: SUB AL,37H

Revision as of 00:36, 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
             
             CMP AL,'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.
             SUB AL,30H        ; If the character is not an uppercase letter, it subtracts 30H from the ASCII value of the character,
                                         ; This converts a numeric character ('0' to '9') to its corresponding numerical value (0 to 9).
             JMP L6
             L5: SUB AL,37H
             L6: SHL EBX,4
             ADD BL,AL
             LOOP AGAIN
MOV DATA1, EBX