首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-09-12 
汇编语言关于段名地址问题assume cs:codecode segmentmov ax,cs这样写debug时用r命令查看cx 1ch,如果这

汇编语言关于段名地址问题
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 段。

热点排行