为什么我们这样做,推cs流行?

时间:2013-12-15 15:45:15

标签: assembly nasm x86-16

我说的是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

2 个答案:

答案 0 :(得分:3)

因为

mov ES,CS

不是有效指令,并且要求ES = CS代码。

答案 1 :(得分:1)

cs是段寄存器,它指向正在运行的代码所在的段。

由于字符串在您的代码段中,您需要将该段传递给您调用的int 0x10。