鱼C论坛

 找回密码
 立即注册
查看: 2428|回复: 6

[已解决]实验5第5题

[复制链接]
发表于 2018-1-27 16:24:51 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
assume cs:code

a segment
        db 1, 2, 3, 4, 5, 6, 7, 8
a ends

b segment
        db 1, 2, 3, 4, 5, 6, 7, 8
b ends

d segment
        db 0, 0, 0, 0, 0, 0, 0, 0
d ends

code segment
start:mov ax, a
          mov ds, ax
          mov ax, d
          mov es, ax

          
          mov bx, 0
          
          mov cx,8
          
   s: mov ax, ds:[bx]
      mov es:[bx],ax
          inc bx
          loop s
          
          mov ax, b
          mov ds, ax
          
          mov bx, 0
          
          mov cx,8
          
  s1: mov ax, ds:[bx]
      add es:[bx],ax
          inc bx
          loop s1
          mov ax, 4c00h
          int 21h

code ends
end start
代码哪里出错了?为什么结果不是2 4 6 8 10.....
最佳答案
2018-1-28 15:17:50
本帖最后由 cnkizy 于 2018-1-29 11:41 编辑
zhoujie13 发表于 2018-1-28 15:06
应该是db是8位,不能用ax,要用al


db是8位,可以用ax 要看你写程序的目的是什么。或者说 db里的东西是什么


  1. db '19'
复制代码


这时 要ax来读取了,因为他在内存中就是'31 39' ,两个字节。

当然像
  1. db 7aH,23H,5H
复制代码

这样 最好用 8位寄存器吧 读出来就是 7aH、23H,16位寄存器读出来就是 237aH
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-28 12:03:38 | 显示全部楼层
本帖最后由 cnkizy 于 2018-1-28 12:38 编辑
  1. assume cs:code

  2. a segment
  3.         db 1, 2, 3, 4, 5, 6, 7, 8
  4. a ends

  5. b segment
  6.         db 1, 2, 3, 4, 5, 6, 7, 8
  7. b ends

  8. d segment
  9.         db 0, 0, 0, 0, 0, 0, 0, 0
  10. d ends

  11. code segment
  12. start:          mov ax, a
  13.           mov ds, ax
  14.           mov ax, d
  15.           mov es, ax
  16.          
  17.           mov bx, 0
  18.           mov cx,8
  19.          
  20.    s:           mov ax, ds:[bx]
  21.                   mov es:[bx],ax
  22.           inc bx
  23.           loop s
  24.          
  25.           mov ax, b
  26.           mov ds, ax
  27.          
  28.           mov bx, 0
  29.          
  30.           mov cx,8
  31.          
  32.   s1:           mov ax, ds:[bx]
  33.                   add es:[bx],ax       
  34.           inc bx                ;你用的是16位寄存器,这里应该+2 而不是+1 所以这里应该是 add bx,2
  35.           loop s1
  36.           mov ax, 4c00h
  37.           int 21h

  38. code ends
  39. end start
复制代码


inc bx的结果
QQ截图20180128121615.png

add bx,2的结果
QQ截图2018012812175522222222222222222.png
你用的是16位寄存器bx 这里要加2,如果你非要用inc指令也不是不可以,那得换成bh或者bl

16位寄存器每次读取两个字节,你偏移的时候也应该加上2,inc bx 是加1的意思。

上面那个其实也应该用8位寄存器才对,因为数据是db类型,然后你的inc reg就对了

如下:
  1. code segment
  2. start:        mov ax, a
  3.         mov ds, ax
  4.         mov ax, d
  5.         mov es, ax
  6.         
  7.         mov bx, 0
  8.         mov cx,8
  9.         
  10.    s:         mov al, ds:[bx]
  11.                 mov es:[bx],al
  12.         inc bx
  13.         loop s
  14.         
  15.         mov ax, b
  16.         mov ds, ax
  17.         
  18.         mov bx, 0
  19.         
  20.         mov cx,8
  21.         
  22.   s1:         mov al, ds:[bx]
  23.                 add byte ptr es:[bx],al       
  24.         inc bx                ;这里用的是8位寄存器 al,所以inc bx就对了
  25.         loop s1
  26.         mov ax, 4c00h
  27.         int 21h
  28. code ends
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-28 13:41:26 | 显示全部楼层

还米学那么远,还没学到ptr什么的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-28 13:46:28 | 显示全部楼层
本帖最后由 cnkizy 于 2018-1-28 13:48 编辑
zhoujie13 发表于 2018-1-28 13:41
还米学那么远,还没学到ptr什么的

  1. mov al, ds:[bx]
  2. add byte ptr es:[bx],al      
复制代码

上面的两句话

  1. mov al, ds:[bx]
  2. mov ah, es:[bx]
  3. add ah,al
  4. mov es:[bx],ah
复制代码

等价于这个意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-28 15:06:32 | 显示全部楼层

应该是db是8位,不能用ax,要用al
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-28 15:17:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 cnkizy 于 2018-1-29 11:41 编辑
zhoujie13 发表于 2018-1-28 15:06
应该是db是8位,不能用ax,要用al


db是8位,可以用ax 要看你写程序的目的是什么。或者说 db里的东西是什么


  1. db '19'
复制代码


这时 要ax来读取了,因为他在内存中就是'31 39' ,两个字节。

当然像
  1. db 7aH,23H,5H
复制代码

这样 最好用 8位寄存器吧 读出来就是 7aH、23H,16位寄存器读出来就是 237aH
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 12:20:30 | 显示全部楼层
如果解决了楼主的问题 麻烦楼主 设置个最佳答案 @zhoujie13
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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