鱼C论坛

 找回密码
 立即注册
查看: 1990|回复: 3

[已解决]王爽的书的第八章实验七程序求助

[复制链接]
发表于 2019-1-20 20:35:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
实验七没有做出来,做出来的人请帮助我看看程序,错在哪里?

拷贝了四行的年份和收入,程序如下:
assume cs:codesg, ds:datasg, ss:stacksg
datasg segment
  db '1975','1976','1977','1978'
  dd 16,22,382,1356
  dw 3,7,9,13
datasg ends
stacksg segment
  dw 0,0,0,0,0,0,0,0
stacksg ends
table segment
  db 4 dup('year summ ne ??')
table ends
codesg segment
start: mov ax,datasg
       mov ds,ax
       mov ax,stacksg
       mov ss,ax
       mov sp,16
       mov ax,table
       mov es,ax

       mov bx,0
       mov si,0
       mov cx,4
    s0:mov ax,si
       mov di,4
       mul di
       mov di,ax
       mov al, ds:[bx+si+0]       ;
       mov es:[bx+di+0],al
       mov al, ds:[bx+si+1]
       mov es:[bx+di+1],al
       mov al, ds:[bx+si+2]
       mov es:[bx+di+2],al
       mov al, ds:[bx+si+3]
       mov es:[bx+di+3],al
       mov al,0h
       mov es:[bx+di+4],al
       add si,4
       loop s0
      
       add bx,5
       mov si,0
       mov cx,4
    s1:mov ax,si
       mov di,4
       mul di
       mov di,ax
       mov ax, ds:[si+16]
       mov es:[bx+di+0], ax
       mov dx, ds:[si+18]
       mov es:[bx+di+2], dx
       add si, 4
       loop s1

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

拷贝收入的部分我觉得没有什么问题啊,怎么debug的时候双字的每个字节都逆序。
不能上传图片。
-d 076e:0
076e:0000 31 39 37 35 00 10 00 00 00 20 6E 65 20 3F 3F 79     1975 ...... ne ??y
076e:0010 31 39 37 36 00 16 00 00 00 6E 65 20 3F 3F 79 65     1976.......ne??ye
076e:0020 31 39 37 37 00 7E 01 00 00 65 20 3F 3F 79 65 61     1977.......e ??yea
076e:0030 31 39 37 38 00 4c 05 00 00 20 3F 3F 00 00 00 00     1978.L... ?? .......



最佳答案
2019-1-20 22:08:06
本帖最后由 jackz007 于 2019-1-20 22:11 编辑

      Intel 采用 Little-Endians 模式,数值在内存中存储时,高字节将保存在高地址中。例如,对于 dword 型的变量 0x12345678,我们在内存中能看到的形式将是 78 56 34 12。这就是楼主在 debug 中看到每个字节都逆序的原因。需要说明的是,字节逆序的现象仅存在于数值型变量中,字符串则不存在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-20 22:08:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-1-20 22:11 编辑

      Intel 采用 Little-Endians 模式,数值在内存中存储时,高字节将保存在高地址中。例如,对于 dword 型的变量 0x12345678,我们在内存中能看到的形式将是 78 56 34 12。这就是楼主在 debug 中看到每个字节都逆序的原因。需要说明的是,字节逆序的现象仅存在于数值型变量中,字符串则不存在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-21 08:27:57 | 显示全部楼层
可是我只是移动啊,移动的时候应该原样copy,不应该逆序吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-21 18:34:46 | 显示全部楼层
那这样写进去是不是就可以了?每次都要这样来读内存中的数字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 10:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表