鱼C论坛

 找回密码
 立即注册
查看: 24|回复: 1

[汇编作业] 第六章实验5.5

[复制链接]
发表于 昨天 05:58 | 显示全部楼层 |阅读模式

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

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

x
  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. c segment
  9.     db 0,0,0,0,0,0,0,0
  10. c ends

  11. code segment
  12. start:  mov ax,a
  13.         mov ds,ax
  14.         mov ax,b
  15.         mov es,ax
  16.         mov ax,c
  17.         mov ss,ax
  18.         mov bx,0
  19.         mov cx,8
  20.     s:  mov dx,0
  21.         add dx,ds:[bx]
  22.         add dx,es:[bx]
  23.         mov ss:[bx],dx
  24.         add bx,2
  25.         loop s

  26.         mov ax,4c00h
  27.         int 21h
  28. code ends
  29. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 06:00 | 显示全部楼层
您的汇编代码中有几个错误,主要涉及偏移地址的缺失、寄存器大小不匹配以及索引增加错误。下面我将简要说明问题并提供修正后的代码。

### 错误分析:
- 在指令如 add dx,ds: 中,缺少偏移地址(例如,应为 ds:[bx])。
- 使用16位寄存器 dx 来添加8位数据,会导致数据大小不匹配。应使用8位寄存器如 al
- 循环中索引增加应为1(因为数据是字节),但代码中使用了 add bx,2,这会导致访问错误的数据。

### 修正后的代码:
以下是修正后的代码,使用正确的偏移地址、寄存器大小和索引增加方式。注意,我保留了使用 ss 段寄存器用于存储,但通常 ss 用于堆栈,这里在没有堆栈操作的情况下可以工作。


  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. c segment
  9.     db 0,0,0,0,0,0,0,0
  10. c ends

  11. code segment
  12. start:  mov ax,a
  13.         mov ds,ax        ; ds 指向 a 段
  14.         mov ax,b
  15.         mov es,ax        ; es 指向 b 段
  16.         mov ax,c
  17.         mov ss,ax        ; ss 指向 c 段(注意:ss 通常用于堆栈)
  18.         mov bx,0         ; 初始化索引为 0
  19.         mov cx,8         ; 循环 8 次

  20.     s:  mov al,ds:[bx]   ; 从 a 段读取字节到 al
  21.         add al,es:[bx]   ; 加上 b 段的字节
  22.         mov ss:[bx],al   ; 存储结果到 c 段
  23.         inc bx           ; 索引增加 1(因为数据是字节)
  24.         loop s

  25.         mov ax,4c00h
  26.         int 21h
  27. code ends
  28. end start
复制代码


### 说明:
- 修正了偏移地址的使用,例如 ds:[bx]
- 改用8位寄存器 al 来处理字节数据。
- 将索引增加改为 inc bx(每次增加1)。
- 代码现在应该能正确地将 a 和 b 段的对应元素相加,结果存入 c 段。

如果您有其他问题,请随时问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-27 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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