;把DX,AX中的双字右移四位。
assume cs:code
code segment
start:
MOV DX, 0FFFFH
MOV CL, 4 ;设置循环次数为4
SHR AX, CL ;实现将AX逻辑右移
MOV BL, DL ;将DL的低4位暂存在BL中
SHR DX, CL ;实现将DX逻辑右移
SHL BL, CL ;将BL逻辑左移
OR AH, BL ;将BL或上AH ;也就是使DL的低4位或上AH高4位,从而实现了DX、AX中的双字右移四位。
mov ax, 4c00H
int 21H
code ends
end start
思路:假如DX+AX存储的一串8位16进制数(双字)是:1234‘5678,那我们右移4位后得到的显然应当是0123’4567,可若只是简单分别将DX、AX右移4位,那样得到的是:0123‘0567。4就丢了,这里我们采用的方法是把34先存起来,然后执行一个左移四位变成:40再和05相或,就变成45了,拼起来就是结果0123’4567了