Difference between revisions of "MPLab 32bit Multiplication"

From MKWiki
Jump to navigation Jump to search
Line 47: Line 47:
 
              
 
              
 
             CMP AL,'A'          ;compares the value in the AL register (the character just read) with the character 'A'.
 
             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.
+
             JGE L5               ; If the character in AL is greater than or equal to 'A', program jumps to Label L5.
             SUB AL,30H         ; otherwise, it subtracts 30H from the ASCII value of the character,
+
             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).
 
                                 ; converts a numeric character ('0' to '9') to its corresponding numerical value (0 to 9).
 
             JMP L6
 
             JMP L6

Revision as of 00:45, 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       ; 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).
             JMP L6
             L5: SUB AL,37H
             L6: SHL EBX,4
             ADD BL,AL
             LOOP AGAIN
MOV DATA1, EBX