下面是一些作業 - 16 位 x86 程式集
global _start
section .text
_start: mov ah, 0x0e
mov bp, 0x8000
mov sp, bp
push "A"
push "B"
push "C"
pop bx
mov al, bl
int 0x10
pop bx
mov al, bl
int 0x10
mov al, [0x7ffe]
int 0x10
jmp $
times 510 -( $ - $$ ) db 0
dw 0 xaa55
我將 3 個值壓入堆疊,然后列印第一個 2。我試圖通過間接尋址來列印第三個值,因此 mov al, [0x7ffe] - 但問題是,因為堆疊的基數為 0x8000 并且只能彈出 16 位值,不是要列印的最后一個字符的地址,-“a”是 0x8000 - 0x1 = 0x7FFF 而不是 0x8000 - 0x2,即上面代碼中的 0x7FFe,作為 1 個 16 位位元組是 0x10 嗎?
uj5u.com熱心網友回復:
在 x86 實模式下,您無法推送 8 位值。因此,您的三個push指令實際上是在推動 16 位值0x0041、0x0042和0x0043。由于 x86 是 little-endian,值的實際字符部分來自“first”,因此0x41表示“A”將位于 address 0x7ffe。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430128.html
下一篇:Mips用整數和字符制作字串
