x86汇编学习-段内跳转和段间跳转-11

133 阅读1分钟

段内跳转

给出偏移地址 jmp [near|short] 偏移地址
偏移地址: 要跳转的地址距离jmp语句的相对位置
near:
跳转距离远 index > 128 index < -127
index是一个16位偏移量 short:
跳转距离近 -127 < index < 128
index是一个8位偏移量

段间跳转

直接给出段地址和偏移地址 计算方式: (段地址<<4)+偏移地址 = 跳转的目标地址

对Hello World的改进

start:
	mov ax, 0xb800
	mov ds, ax
	
	mov byte[0x00], 'H'
	mov byte[0x01], 0x06

	mov byte[0x02], 'e'
	mov byte[0x03], 0x06
	
	mov byte[0x04], 'l'
	mov byte[0x05], 0x06
	
	mov byte[0x06], 'l'
	mov byte[0x07], 0x06
	
	mov byte[0x08], 'o'
	mov byte[0x09], 0x06
	
	mov byte[0x0a], ' '
	mov byte[0x0b], 0x06
	
	mov byte[0x0c], 'W'
	mov byte[0x0d], 0x06
	
	mov byte[0x0e], 'o'
	mov byte[0x0f], 0x06
	
	mov byte[0x10], 'r'
	mov byte[0x11], 0x06
	
	mov byte[0x12], 'l'
	mov byte[0x13], 0x06
	
	mov byte[0x14], 'd'
	mov byte[0x15], 0x06

loop:
	; jmp short loop
	jmp near loop

current:
	times 510-(current-start) db 0

db 0x55, 0xaa