當前位置:編程學習大全網 - 編程語言 - 用匯編語言編寫:由鍵盤輸入兩個整數val1和val2,輸出稍大於val1且是val2整數倍的數 就編寫壹個這樣的程序

用匯編語言編寫:由鍵盤輸入兩個整數val1和val2,輸出稍大於val1且是val2整數倍的數 就編寫壹個這樣的程序

樓主,妳問的簡單,“就編寫壹個這樣的程序”,這個程序拿C語言編肯定非常簡單,拿匯編可沒那麽容易啊。

以下是程序,簡單說明幾點:

1. 由於輸入、輸出的都是字符,所以用了兩個函數。Atoi16是把輸入的字符轉為正整數,I16toa 是把整數轉成字符串。

2. 調用Atoi16時,要配好si和cl兩個寄存器。si為轉換字符串的起始地址,cl為轉換結束字符。例如輸入兩個數字,回車結束輸入,而兩個數字之間以空格分隔,比如1234 5678,那麽第壹次si指向1,cl為空格;第二次si指向5,cl為回車符,每次的轉換結果以ax返回。

3. 調用I16toa函數時,把要轉換的整數放到ax裏,si指向存儲轉換結果的字符串起始位置。

4. 輸入數字最好不要超過10000。當然超過10000也可以,比如輸入 3456 2345,只要別讓最終的計算結果超過65535就沒問題。

5. 第壹個大於val1又能整除val2的數為:((val1 / val2) + 1) * val2

dseg segment

LF equ 0ah

msg db 'Please input two numbers.', 0ah, 0dh, '$'

bufin db 20, 20 dup(?)

bufout db 10 dup(?)

val1 dw ?

val2 dw ?

dseg ends

cseg1 segment

assume cs:cseg1, ds:dseg

START:

mov ax, dseg

mov ds, ax

lea dx, msg

mov ah, 9

int 21h

lea dx, bufin

mov ah, 0ah

int 21h

mov dl, LF

mov ah, 2

int 21h

lea si, bufin + 2

mov cl, ' '

call Atoi16

mov val1, ax

inc si

mov cl, 0dh

call Atoi16

mov val2, ax

mov ax, val1

xor dx, dx

mov bx, val2

div bx

inc ax

mul bx

lea si, bufout

call I16toa

lea dx, bufout

mov ah, 9

int 21h

mov ah, 04ch

int 21h

cseg1 ends

cseg2 segment

assume cs:cseg2

Atoi16 proc far

xor ax, ax

xor bx, bx

Convert:

mov bl, [si]

mov dx, 10

mul dx

and bx, 0fh

add ax, bx

inc si

mov bl, [ si ]

cmp bl, cl

jne Convert

ret

Atoi16 endp

I16toa proc far

push ax

push bx

push cx

push dx

push si

mov bx, 10

xor cx, cx

next:

xor dx, dx

div bx

or dl, 30h

push dx

inc cx

cmp ax, 0

jnz Next

Store:

pop dx

mov [ si ], dl

inc si

loop Store

mov byte ptr[ si ], '$'

pop si

pop dx

pop cx

pop bx

pop ax

ret

I16toa endp

cseg2 ends

end START

  • 上一篇:電動尾門的優缺點是什麽?
  • 下一篇:中國人民大學財政金融學院2023年emba專業學位研究生招生簡章
  • copyright 2024編程學習大全網