王爽 匯編語言 檢測點 14.2
阿新 • • 發佈:2018-04-03
技術 人的 可能 jmp 圖片 body 移位 image DC
1.程序說明
編程,用加法和移位指令計算(ax)=(ax)*10.
提示, (ax)*10=(ax)*2+(ax)*8.
2.程序描述
因為看其他人的答案,都發現不是很完美,沒有考慮進位,最後答案會有很大的偏差.所以自己寫下自己的想法
(1) 如果ax足夠大,那麽ax*10的結果在ax中就無法保存.我們必須用另一個寄存器存儲高位的值.
用dx存儲ax*2的值 bx存儲進位.
3.代碼
1 assume cs:code 2 code segment 3 start: 4 mov ax,5345h 5 movbx,0 ;bx存儲ax左移的進位值 6 mov dx,ax ;bx存儲最開始的ax值 7 ;ax*8 將ax左移3位,因為每左移一次都可能進位,所以選擇用循環 8 mov cx,3 9 s1: 10 shl bx,1 ;先將高位*2,再將低位*2 11 shl ax,1 12 adc bx,0 ;將低位進位值加到高位 13 loop s1 14 15 shl dx,1 ;計算 ax*216 adc bx,0 17 18 add ax,dx ;ax*8+ax*2 19 adc bx,0 20 21 s: ;無限循環,防止退出 22 jmp short s 23 mov ax,4c00h 24 int 21h 25 code ends 26 end start
4.結果
5345h*10 最後的結果就是340B2h,bx存儲高位,ax存儲低位.
王爽 匯編語言 檢測點 14.2