附加段寄存器
ES寄存器
当需要操作两个段的数据时 需要不停的切换ds数据段寄存器的值 附加段寄存器的作用就是解决频繁给ds寄存器赋值的操作
DS寄存器指向一块空间 ES寄存器指向另一块空间
使用数据直接用偏移地址 当需要使用ES的空间时指定[es:段内偏移地址]
代码
start:
mov ax, 23333 ; 被除数低16位
xor dx, dx ; 被除数高16位
mov bx, 10 ; 除数
mov cx, 0
mov ds, cx ; 设置数据段起始地址
div bx ; 执行除法
add dl, 0x30 ; 数字转字符
mov [0x7c00+buffer], dl ; 放到buffer内存空间第一个位置
xor dx, dx ; 清空dx寄存器 准备下次除法
div bx
add dl, 0x30
mov [0x7c00+buffer+1], dl
xor dx, dx
div bx
add dl, 0x30
mov [0x7c00+buffer+2], dl
xor dx, dx
div bx
add dl, 0x30
mov [0x7c00+buffer+3], dl
xor dx, dx
; 23333的最后一个数位解析完成
div bx
add dl, 0x30
mov [0x7c00+buffer+4], dl
xor dx, dx
mov cx, 0xb800
mov es, cx ; es寄存器指向显存起始位置
mov al, [0x7c00+buffer+4] ; 取出内存里面的字符2
mov [es:0x00], al ; 将字符2写入显存
mov byte[es:0x01], 0x2f ; 设置字符2的显示状态
mov al, [0x7c00+buffer+3]
mov [es:0x02], al
mov byte[es:0x03], 0x2f ; 0x2f是立即数 立即数可大可小 需要使用byte指定目标大小
mov al, [0x7c00+buffer+2]
mov [es:0x04], al
mov byte[es:0x05], 0x2f
mov al, [0x7c00+buffer+1]
mov [es:0x06], al
mov byte[es:0x07], 0x2f
mov al, [0x7c00+buffer]
mov [es:0x08], al
mov byte[es:0x09], 0x2f
loop:
jmp short loop
buffer db 0, 0, 0, 0, 0
current:
times 510-(current-start) db 0
db 0x55, 0xaa