我说的是16位8086(Nasm)。我可以理解完整的代码,但我不明白为什么我们必须这样做
push cs
pop es
在下面的代码中
; print string using bios service
[org 0x0100]
jmp start
message: db 'Hello World'
start: mov ah, 0x13 ; service 13 - print string
mov al, 1 ; subservice 01 – update cursor
mov bh, 0 ; output on page 0
mov bl, 7 ; normal attrib
mov dx, 0x0A03 ; row 10 column 3
mov cx, 11 ; length of string
;******************
push cs
pop es ; segment of string
;******************
mov bp, message ; offset of string
int 0x10 ; call BIOS video service
mov ax, 0x4c00 ; terminate program
int 0x21
答案 0 :(得分:3)
因为
mov ES,CS
不是有效指令,并且要求ES = CS代码。
答案 1 :(得分:1)
cs是段寄存器,它指向正在运行的代码所在的段。
由于字符串在您的代码段中,您需要将该段传递给您调用的int 0x10。