ziheng99 发表于 2013-7-17 19:34:22

鱼C汇编实验7 寻址方式在结构化数据访问中的应用 的问题

以下是代码
但是debug后发现
成功copy了数据段中的年份
es中 收入&雇员都是乱码
-d 了一下 结果是这样的

assume cs:codesg,ds:data,es:table
data segment
      db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
      db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
      db '1993','1994','1995'
      ;以上是表示21年的21个字符串
      dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
      dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
      ;以上是表示21年公司总收的21个2word型数据
      dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
      dw 11542,14430,45257,17800
      ;以上是表示21年公司雇员人数的21个word型数据
data ends
table segment
      db 21 dup('year summ ne ?? ')
table ends
;年份 0-53h 收入 54h-0a7h 雇员0a8h-0d1h
codesg segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov di,0
mov cx,21
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;初始化
xh:mov ax,ds:
mov word ptr es:,ax
mov ax,ds:
mov word ptr es:,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;拷贝年份
mov ax,ds:
mov word ptr es:,ax
mov ax,ds:
mov word ptr es:,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;拷贝收入
mov ax,ds:
mov word ptr es:,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;拷贝人数
add bx,10h
add di,4h
add si,2
loop xh
mov ax,4c00h
int 21h
codesg ends
end start

Dardy 发表于 2013-7-17 19:34:23

ziheng99 发表于 2013-7-17 20:49 static/image/common/back.gif
那就是说我程序没错,,只是debug没显示出来???

那是,只要你知道,右边是怎么显示的就行。

有只小稚飞不起 发表于 2013-7-17 19:37:25

……                                                                                                                                                            

有只小稚飞不起 发表于 2013-7-17 19:50:49

mov word ptr es:,ax    ;多此一举

写倒了,dd类型 存储方式错误


ziheng99 发表于 2013-7-17 20:08:31

有只小稚飞不起 发表于 2013-7-17 19:50 static/image/common/back.gif
mov word ptr es:,ax    ;多此一举

写倒了,dd类型 存储方式错误

可以详细说一下么

Dardy 发表于 2013-7-17 20:27:46

DS中 16,22 内存中四字节 就是 10 00 00 0016 00 00 00   没有错,要倒过来看 如内存中的16 倒过来就是 00 00 00 10 ,从16进制换成10进制就是 16.
年份在右边可以正确显示如1975什么的,但它在内存显示的会是这4个字符的ASC码。
debug中,左边是每个字节值的16进制,而右边显示的是把对应的每个字节,当成ASC码,这ASC码对应的字符就是显示出来的。

Dardy 发表于 2013-7-17 20:29:44

ASC码就128个,不是每个16进制的两位数都可当成ASC码,也就不能显示为字符了。

ziheng99 发表于 2013-7-17 20:49:39

Dardy 发表于 2013-7-17 20:29 static/image/common/back.gif
ASC码就128个,不是每个16进制的两位数都可当成ASC码,也就不能显示为字符了。

那就是说我程序没错,,只是debug没显示出来???

∑L.X 发表于 2013-7-27 10:38:22

mov ax,ds:8a8h]
mov word ptr es:,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;拷贝人数
应该是0a8h

ziheng99 发表于 2013-8-1 15:29:02

∑L.X 发表于 2013-7-27 10:38 static/image/common/back.gif
mov ax,ds:
mov word ptr es:,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;拷贝人数


靠 原来是这个问题
正解了
页: [1]
查看完整版本: 鱼C汇编实验7 寻址方式在结构化数据访问中的应用 的问题