通过打印寄存器的值,发现cs寄存器初始值为0x0000
打印寄存器代码如下
;将寄存器中的值打印到屏幕上
mov ax,0x8c00 ;因为要用到call指令,定义堆栈
mov ss,ax,
mov ax,100
mov sp,ax
mov ax,0xb800 ;将es段寄存器指向0xb800
mov es,ax
mov ax,cs ;给ax寄存器一个值
mov dh,ah ;保存ah,以便于显示ah的第二个
shr ah,4 ;以下显示ah寄存器的第一个
call x
mov byte [es:0x00],ah
mov byte [es:0x01],0x07
mov ah,dh ;以下显示ah寄存器的后一个
shl ah,4 ;通过先逻辑右移,再逻辑左移,将ah高为清零
shr ah,4
call x
mov byte [es:0x02],ah
mov byte [es:0x03],0x07
mov dh,al ;保存al以便于显示al的第二个
shr al,4
mov ah,al ;显示al的第一个
call x
mov byte [es:0x04],ah
mov byte [es:0x05],0x07
mov al,dh ;显示al的第二个
shl al,4 ;通过先逻辑右移,再逻辑左移,将al高为清零
shr al,4
mov ah,al
call x
mov byte [es:0x06],ah
mov byte [es:0x07],0x07
x:
cmp ah,10
jnl x1 ;jnl指令,大于等于则跳转
add ah,0x30
ret
x1:
add ah,0x57
ret
times 510-($-$$) db 0
dw 0xaa55