夜了静了 发表于 2012-3-18 21:00:25

汇编语言6.1中的一个问题 快崩溃了

检测点6.1(第119页)
-------------------
(1)
assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
    mov ds,ax
    mov bx,0

    mov cx,8
s: mov ax,
      mov cs:,ax;此条指令为所填指令
    add bx,2
    loop s

    mov ax,4c00h
    int 21h
codesg ends
end start

DW 写的那一段数据写到哪个段呢?好像是CS吧那写进去后 为什么还有mov cs:,ax    CS不是已经改变了吗内存的段地址就不是0了 不是    求各位大神求解   小的先谢谢了   一直不太懂这些   

wAterLoo 发表于 2012-3-18 21:08:54

本帖最后由 wAterLoo 于 2012-3-18 21:10 编辑

ds:0-ds:15的数据只是写入到cs:0-cs:15的内存中,并没有说CS寄存器的值被更改了

cqy55555 发表于 2012-3-18 21:14:41

同楼上。。。外加介个程序执行时改变了IP,CS木有变。。。。

nichkhun 发表于 2012-3-18 21:18:26

DW写到了数据段(DS段),mov cs:,ax只是个写法(意思等同于这个mov bx, ax把,或许不是),内存段地址不会是0的把

skywancen 发表于 2012-3-18 21:40:45

程序加载到内存的时候,cs代码段的前16位保存dw这个八个字符,之后是程序。所以 cs:,ax 的含义就是用内存地址00001-0000F来替换DW里面的数据。

hejian 发表于 2012-3-23 12:07:19

这个我开始也不太理解!后来想了一下应该是这样?
dwX,X,X,X,X,X,这里是先让CPU在CS里给我们一个16位的字节空间?这样才能让以下代码中的DS指定的内存数据能进入CS内存?

页: [1]
查看完整版本: 汇编语言6.1中的一个问题 快崩溃了