彙編作業 關於乙個十進位制數的輸入與輸出函式

2021-10-10 06:10:00 字數 1507 閱讀 6310

輸入函式,沒有入口引數,出口引數為ax

思路用乙個例子來解釋,比如要輸入215,

輸入2,預設輸入到al,令dl=al=2,al=bl=0,bl=al*10=0,bl=bl+dl=2

輸入1,預設輸入到al,令dl=al=1,al=bl=2,bl=al*10=20,bl=bl+dl=21

輸入5,預設輸入到al,令dl=al=5,al=bl=21,bl=al*10=210,bl=bl+dl=215

;定義input函式,輸入數值

input

proc

push

bxpush

cxpush

dxmovbl,

0;在計算過程中使用,

movcl,

10;定義乘數l4:

movah,1

;輸入資料

int 21h

cmpal,

'0';不滿足條件跳出

jbl3

cmpal

,'9'

;不滿足條件跳出

jal3

movdl,al

subdl,48

moval,bl

mulcl

movbl,al

addbl,dl

jmpl4l3:

movax,bx

popdx

popcx

popbx

retinput

endp

輸出函式,入口引數為ax,沒有出口引數

思路還是用乙個例子來解釋,比如要輸出215,

ax=215,al=ax/10=21, ah=ax%10=5, ax入棧,令ax=al=21(即ah=0)

ax=21,al=ax/10=2,ah=ax%10=1, ax入棧,令ax=al=2

ax=1,al=ax/10=0,ah=ax%10=2, ax入棧,令ax=al=0,跳出迴圈

依次出棧

;定義output函式

output

proc

push

axpush

bxpush

cxpush

dxmovbh,

0;記錄壓棧次數

movcl,

10l1

:addbh,

1divcl;

ax/cl,商al,餘數ah

push

axmovah,

0cmpal,

0jal1;全部壓棧,開始輸出l2:

subbh,1

popdx

movdl,dh

adddl,48

movah,2

int 21h

cmpbh,

0jal2pop

dxpop

cxpop

bxpop

axret

output

endp

彙編 判斷乙個兩位十進位制數是否為平方數

思路 這道題的思路非常簡單,列舉100以內的平方數,再判斷是否與輸入的數相等 但用組合語言實現可能會有一些複雜 data segment x dw s1 db is a square number s2 db is not a square number data ends code segment...

怎麼將乙個十六進製制數轉變成十進位制數

在程式中,我們有時需要將乙個十六進製制字串轉換為十進位制數字。比如 char ptr 0x11 int n 0 我們想讓n等於0x11,即17 通常我們在c中,想將乙個字串轉換為一整形數字,通常會使用下面的方法 view plaincopy to clipboardprint?char ptr 12...

彙編學習 一位十六進製制數轉換為十進位制數

程式執行效果如下 如題,此程式只能實現一位十六進製制數的轉換 具體 如下 datas segment buf db 5 dup msg1 db please input a hex number 13,10,設定提示 msg2 db the dec number 13,10,ctlf db 13,1...