回 帖 发 新 帖 刷新版面

主题:请来看看

xor ah,ah
shl ax,1
mov bx,ax
shl ax,1
shl ax,1
add ax,bx

这段程序实现把寄存器al的内容(设为无符号数)乘10,结果存放在ax中

这个程序看不太明白,好象和他说的题目没关系,哪来的乘以10?
请朋友帮忙详细解释

回复列表 (共2个回复)

沙发

ax=2*al
bx=ax=2*al
ax=2*ax=2*(2*2l)=4*al
ax=2*ax=8*al
ax+bx=8*al+2*al=10*al

板凳

xor ah,ah   ;ah内容清零,为将来的al的左移操作腾出8个位,用以保证左移不会使al丢失最高位。
shl ax,1   ;ah已经清零,相当于al左移一位,最高位进ah,低位补零。是al×2的操作。
mov bx,ax  ;将2al送bx
shl ax,1   ;是 2al×2的操作,结果是4al
shl ax,1   ;结果是8al
add ax,bx  ;8al+2al,得10al

我来回复

您尚未登录,请登录后再回复。点此登录或注册