变址寻址
- 使用SI/DI给出偏移地址 且不指定段寄存器时 默认使用段寄存器DS
mov [si], dx ; dx的数据放到一个内存地址 内存地址由si寄存器给出
mov ax, [di] ; di内存地址的数据放到ax寄存器 - 变址寻址允许在SI/DI基础上加上偏移量
mov [si+0x100], al
mov byte[di+message], 0x80
使用变址寻址和栈反转字符串
源字符串 ABCDEFG
输出字符串 GFEDCBA
jmp start
message db 'ABCDEFG'
start:
mov ax, 0x07c0
mov ds, ax ; 设置段寄存器
mov ax, 0xb800
mov es, ax ; 设置附加段寄存器
mov ax, cs
mov ss, ax ; 栈段寄存器
mov sp, 0 ; 栈指针寄存器
mov si, message ; 指向字符'A'
mov cx, start-message ; 循环次数
pushstack: ; 数据入栈
mov ax, [si]
push ax
inc si
loop pushstack
xor ax, ax
mov cx, start-message
mov di, 0
reverse:
pop ax
mov [es:di], al
inc di
mov byte [es:di], 0x07
inc di
loop reverse
jmp $
times 510-($-$$) db 0
db 0x55, 0xaa