当前位置: 代码迷 >> 汇编语言 >> 汇编语言关于段名地址有关问题
  详细解决方案

汇编语言关于段名地址有关问题

热度:3948   发布时间:2013-02-26 00:00:00.0
汇编语言关于段名地址问题
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 段。
  相关解决方案