简单的跟1111一样的问题,可我就是搞不定!人笨!

houwei16 2005-09-30 08:09:19
data segment
r1 dw ('a')
r3 dw (?)
data ends

code segment
assume cs:code,ds:data

mov dx,r1
mov r3,dx

int 21h
code ends
end

上面的程序在masm 5.0下运行后,用debug看,怎么r3里的内容总不是'a'(61 00)。为什么???
...全文
113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2005-10-01
  • 打赏
  • 举报
回复
怎么会呢?

data segment
r1 dw ('a')
r3 dw (?)
data ends

code segment
assume cs:code,ds:data
start:
mov ax, data
mov ds, ax
mov dx,r1
mov r3,dx
mov ah, 4ch ;*+
int 21h
code ends
end start



E:\MASM>DEBUG HOUWEI.EXE
-U 0 L 10
12A0:0000 B89F12 MOV AX,129F
12A0:0003 8ED8 MOV DS,AX
12A0:0005 8B160000 MOV DX,[0000]
12A0:0009 89160200 MOV [0002],DX
12A0:000D B44C MOV AH,4C
12A0:000F CD21 INT 21
-G 5

AX=129F BX=0000 CX=0021 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=129F ES=128F SS=129F CS=12A0 IP=0005 NV UP EI PL NZ NA PO NC
12A0:0005 8B160000 MOV DX,[0000] DS:0000=0061
-D 0 L 4 ; 这里是原始数据
129F:0000 61 00 00 00 a...
-G F

AX=4C9F BX=0000 CX=0021 DX=0061 SP=0000 BP=0000 SI=0000 DI=0000
DS=129F ES=128F SS=129F CS=12A0 IP=000F NV UP EI PL NZ NA PO NC
12A0:000F CD21 INT 21
-D 0 L 4 ; 看看下面的变化
129F:0000 61 00 61 00 a.a.
-
houwei16 2005-10-01
  • 打赏
  • 举报
回复
上面两种方法我都试了,可是都不行。

设置了DS和不设ds都是一样的,地址都是0cd6:0100

还有,我定义了es段,设置了这后,es的地址还是0cd6:0100,这又是为什么?
zara 2005-10-01
  • 打赏
  • 举报
回复
不是的, 是没有设置 DS 的缘故. 在 assume 语句之后加上:
start:
mov ax, data
mov ds, ax
就可以了.

另外, 应该通过 end start 语句指定程序是从 start: 标号处开始执行的, 否则, 会将 data 数据段的内容作为代码从那里开始的, 这样还会引发其它的问题, 尤其是程序的结构或 data 段比较复杂的时候
nxnh 2005-09-30
  • 打赏
  • 举报
回复
你怎么看的r3??ds的值都不确定,你知道r3在哪吗.看看下面两句的区别
mov dx,ds:r1
mov dx,date:r1

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧