一、步骤流程
首先将需要显示的数据放入AL寄存器中,将AH置为0;AX寄存器逻辑左移一位,AL的最高一位被送入AH,将AH送入内存保存。
接着继续将AH置0,因为我们只需要其最低位,不置零将会影响后续的写回操作。
继续逻辑左移一位,将第二位送入AH,并将AH送内存存储,并将AH置0.
通过8次这样的重复操作就能将AL的8位分离送入内存的八个不同字节内 。
最后就是写回操作,从后往前将内存各个字节的内容通过加操作送入AL(不可用mov,会改变AL的其他位),加完后逻辑左移一位。注意写回只需移位7次,最后一次直接加不用移位。
二、相关代码
assume cs:code, ds:data
data segment
db 0,0,0,0,0,0,0,0
data ends
code segment
start: mov ax, data
mov ds, ax
mov ah, 1
int 21h ; al写入数据
mov bx, 0
mov cx, 8
s: mov ah, 0
shl ax, 1
mov ds:[bx], ah
inc bx
loop s
mov bx, 7
mov cx, 7
mov al, 0
s1: add al, [bx]
shl ax,1
dec bx
loop s1
add al, [bx]
mov ax, 4c00h
int 21h
code ends
end start