組合語言兩位數的乘法

2021-10-06 08:50:29 字數 2394 閱讀 7915

本人比較菜,第一次在csdn上寫部落格,怕學過的東西忘記就寫下了這篇關於彙編巨集的使用的部落格,以後還能找到。

具體題目如下:

定義巨集,完成兩個運算元相乘,乘積在第3個運算元中。並寫乙個簡單的程式呼叫這個巨集,完成2個從鍵盤輸入資料的相乘及結果輸出。

**如下:

datas segment

;此處輸入資料段**

x db 2 dup(?)

y db 2 dup(?)

z dw ?

mess1 db 'please enter two double digits, each ending with enter:',0ah,0dh,'$'

mess2 db 0ah,0dh,'result=$'

datas ends

stacks segment

;此處輸入堆疊段**

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

start:

mov ax,datas

mov ds,ax

;此處輸入**段**

;只能支援兩位數的乘法!!!

input1 macro opr1 ;輸入巨集-x

mov cx,1h

mov si,0h

let1:

mov ah,1h

int 21h

cmp al,0dh

je let2

sub al,30h

mov opr1[si],al

inc si

jmp let1

let2:

loop let1

endm

input2 macro opr2 ;輸入巨集-y

mov cx,1h

mov si,0h

let3:

mov ah,1h

int 21h

cmp al,0dh

je let4

sub al,30h

mov opr2[si],al

inc si

jmp let3

let4:

loop let3

endm

mulxy macro op1,op2,op3 ;運算巨集

mov bx,0h

mov al,op1[0]

mov bl,op1[1]

mov cl,0ah

mul cl

add ax,bx ;ax中存的是x的真值

push ax ;x暫存起來

mov ax,0h

mov bx,0h

mov al,op1[0]

mov bl,op1[1]

mov cl,0ah

mul cl

add ax,bx ;目前ax存放y的真值

mov bx,0h

pop bx

mul bx ;x*y運算結果放入ax中

mov z,ax

endm

output1 macro op ;輸出巨集

mov ax,0h

mov bx,0h

mov dx,0h

mov cx,0h

mov ax,op

mov bx,0ah

let5:

div bx

push dx ;存餘數

mov dx,0h

inc cx

cmp ax,0h

jnz let5

let6:

mov ah,2h

pop dx

add dx,3030h

int 21h

loop let6

endm

lea dx,mess1 ;提示資訊

mov ah,9h

int 21h

input1 x

input2 y

mulxy x,y,z ;結果在z中

lea dx,mess2 ;提示資訊

mov ah,9h

int 21h

;輸出結果時是將運算結果除以十然後餘數入棧

;最後彈出餘數呼叫dos系統2號功能依次輸出結果

output1 z

mov ah,4ch

int 21h

codes ends

end start

ps:

2021回頭來看到這篇部落格,把**拿到軟體上跑了一下,發現出bug了!

很抱歉,當初沒有除錯出來,但現在已經忘得差不多了(枯),本文的**僅供參考,並非標準程式,再次對曾經看到過這篇文章的同志們表示抱歉

兩位數乘法

option base 1 private sub command1 click dim m as string dim n as string m trim text1.text n trim text2.text dim number1 as byte dim number2 as byte r...

兩位數的乘法

private sub command1 click dim n as integer dim m as integer n trim text1.text m trim text2.text dim number1 as integer dim number2 as integer redim n...

彙編實現兩位數相加

本來簡單的兩個數相加用高階語言只是兩行 的問題,但是到了組合語言,就需要什麼考慮了,比如先定義資料段 還有 段,有的時候還需要定義堆疊段 eg 先定義資料段 datas segment data1 db 255 dup 定義了乙個變數名為data1 長度為255個字 的字串 data2 db 255...