Difference between revisions of "MPLab 32bit Multiplication"

From MKWiki
Jump to navigation Jump to search
Line 10: Line 10:
 
<pre>
 
<pre>
 
.data          ; .data directive indicates the beginning of data section  
 
.data          ; .data directive indicates the beginning of data section  
 +
 
; DATA1 and DATA2 are 32-bit variables initialized to 0.  
 
; DATA1 and DATA2 are 32-bit variables initialized to 0.  
 
DATA1 dd 00000000H         
 
DATA1 dd 00000000H         
 
DATA2 dd 00000000H
 
DATA2 dd 00000000H
 +
 
; PROD1 and PROD2 32-bit uninitialized variables.
 
; PROD1 and PROD2 32-bit uninitialized variables.
 
PROD1 dd ?           
 
PROD1 dd ?           

Revision as of 23:54, 25 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 ?

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
MOV EBX, 00000000        ; Initialize EBX to 0; EBX will be used to store the sum.
; Display the "Enter the first number: " message using DOS interrupt 21h (AH=09h).
MOV AH,09
MOV DX,OFFSET num1
INT 21H
MOV ECX, 8         ; initialize ECX to 8, to read 8 characters
AGAIN: MOV AH, 01     ; Read a character from the input device using DOS interrupt 21h (AH=01h).  AGAIN is label for loop.
INT 21H
CMP AL, 'A'                   ; Check if the character is greater than or equal to 'A' 
JGE P1                          ; If greater than 'A', jump to P1
SUB AL,30H                  ; subtract 30H to convert it to a decimal digit.     
JMP P4
P1: SUB AL, 37H          ; subtract 37H to convert it to a decimal digit.   
P4: SHL EBX, 4            ; Shift the value in EBX left by 4 bits 
MOV AH,00                  
ADD EBX, EAX           
LOOP AGAIN           
MOV data1, EBX