汇编语言关于段名地址问题
assume cs:code
code segment
mov ax,cs;这样写debug时用r命令查看cx = 1ch,如果这样写mov ax,code debug时cx = 1dh,但是执这
;句后,ax是一样的,说明cs = code,为什么cx会不相同呢?
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,10h
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
[解决办法]
首先CX中存放的是程序的大小。mov ax,cs的机器码是两个字节。而mov ax,code的机器码是三个字节。
mov ax,cs虽然能取得段地址。但是这种方法是错误的。程序漏洞非常明显
[解决办法]
这个,还是有些区别的,适用性上也有不同。比如说,对 com 格式的可执行 dos 程序,要获得当前的代码段段址,就不能用 mov ax,code 指令而只能用 mov ax,cs ;因为前者会形成一个重定位项,有这个就不能生成 com 格式的程序文件。再比如说,复杂点儿的程序,cs 和 code 可能不一样,就是说有可能有多个代码段,当前未必就是在 code 段。