鱼C论坛

 找回密码
 立即注册
查看: 2628|回复: 2

[汇编作业] 实验5(5)疑惑

[复制链接]
发表于 2018-8-24 22:12:31 | 显示全部楼层 |阅读模式

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

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

x


       实验5  
                (5)编写code段中的代码,将a段和b段的数据依次相加,将结果存储在c段中


                       
  1. assume cs:code

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

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

  10. c segment
  11.                         db 0,0,0,0,0,0,0,0
  12.                        
  13. c ends

  14. code segment

  15.         start: mov ax,a
  16.                    mov ds,ax
  17.                   
  18.                    mov ax,b
  19.                    mov es,ax
  20.                   
  21.                    mov ax,c
  22.                    mov ss,ax
  23.                    mov sp,20h
  24.                
  25.                    mov ax,0
  26.                    mov bx,0
  27.                    mov cx,8
  28.        
  29.         s:                 mov  ax,ds:[bx]
  30.                         add  ax,es:[bx]
  31.                        
  32.                         push ax
  33.                         mov ax,0
  34.                         add bx,2
  35.                         loop s
  36.                        
  37.                  mov ax,4c00h
  38.                  int 21h
  39.                  
  40.         code ends
  41.         end start
复制代码


为什么a段和b段依次相加的数据没有成功的存储到c段(SS:SP内)?


2.png
1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-7 08:27:59 | 显示全部楼层
解法一:

assume cs:code

a segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使a段不满16字节,也占用0-f内存空间。
a ends

b segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使b段不满16字节,也占用10-1f内存空间。
b ends

k segment
    db 0, 0, 0, 0, 0, 0, 0, 0 ;即使k段不满16字节,也占用20-2f内存空间。
k ends

code segment
start: mov ax,a      
       mov ds,ax       ;将a段关联ds段。则使用偏移地址即可得到b、k段数据。
   
           mov bx,0h       ;编译器默认十进制。
           mov cx,8

   s:  mov ax,0h
       add al,[bx]
       add al,[bx+10h] ;b段在a段基础上偏移10H。
       mov [bx+20h],al ;k段在a段基础上偏移20H。
       inc bx
       loop s
     
       mov ax, 4c00H
       int 21H
          
code ends
end start              ;代码33行。

解法二:

assume cs:code

a segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使a段不满16字节,也占用0-f内存空间。
a ends

b segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使b段不满16字节,也占用10-1f内存空间。
b ends

k segment
    db 0, 0, 0, 0, 0, 0, 0, 0 ;即使k段不满16字节,也占用20-2f内存空间。
k ends

code segment
start:mov ax,a
          mov ss,ax         ;将a段关联ss段。
          mov ax,b
          mov es,ax         ;将b段关联es段。
          mov ax,k
          mov ds,ax         ;将k段关联ds段。因为要将结果存到k段中,
                        ;所以k段关联ds段代码看起来更清爽。
             mov bx,0
          mov cx,8
          
    s:mov al,ss:[bx]    ;将a段数据赋予al中。
          add al,es:[bx]    ;将b段数据相加至al中
          mov [bx],al       ;将a、b段数据相加结果赋予k段中。
          inc bx          
          loop s
          
          mov ax,4c00h
          int 21h
          
code ends
end start               ;代码36行。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 08:32:45 | 显示全部楼层
你写的 mov sp,20h 是个什么鬼啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 13:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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