x86汇编-基址-20

115 阅读1分钟

基址寻址

  • 使用BX/BP做偏移地址的寻址方式
  • 使用BX做偏移地址 默认使用DS寄存器做段寄存器 物理地址 = ds << 4 + bx
  • 使用BP做偏移地址 默认使用SS寄存器做寄存器 物理地址 = ss << 4 + bp
功能: 给每一个数加1
buffer dw 0x20,0x100,0x0f

    mov bx, buffer
    mov cx, 3
addone:
    inc word[bx]
    add bx, 2
    loop addone

基址加变址寻址

同时使用BX/BP和SI/DI方式寻址
mov ax, [bx+si+0x03] ---> 物理地址 = ds << 4 + bx + si + 0x03
mov ax, [bp+di+0x03] ---> 物理地址 = ss << 4 + bp + di + 0x03

反转字符串

源字符串 ABCDEFGH
目标字符串 HGCEDFBA

	jmp start

message db 'ABCDEFGH'

start:
	mov ax, 0x07c0
	mov ds, ax
	
	mov ax, 0xb800
	mov es, ax
	
	mov bx, message
	mov si, 0
	mov di, start-message-1

  reverse:
	mov ah, [bx+si]
	mov al, [bx+di]
	mov [bx+si], al
	mov [bx+di], ah
	inc si
	dec di
	cmp si, di
	jl reverse

	mov si, message
	xor di, di
	mov cx, start-message
  print:
	mov al, [si]
	mov [es:di], al
	inc di
	mov byte [es:di], 0x07
	inc di
	inc si
	loop print

	jmp $
	times 510-($-$$) db 0
	db 0x55, 0xaa

结果

捕获.PNG