1. 程式人生 > >王爽 匯編語言 檢測點 14.2

王爽 匯編語言 檢測點 14.2

技術 人的 可能 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         mov
bx,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*2
16 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