鱼C论坛

 找回密码
 立即注册
查看: 4015|回复: 7

实验题5

[复制链接]
发表于 2011-3-9 13:22:19 | 显示全部楼层 |阅读模式

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

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

x
5.程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中

老师给看看做的对吗?
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
  c segment
         db 0,0,0,0,0,0,0,0
  c ends

  code segment
    start: mov ax,c
              mov ss,ax
              mov sp,8
              
              mov bx,0
              mov cx,8
         s:  mov ax,a
              mov ds,ax
              mov al,ds:[bx]
              mov dx,b
              mov ds,dx
              add al,ds:[bx]
              push al
              inc dx
              loop s
          
              mov ax,4c00h
              int 21h
         code ends
end start
                          
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-9 13:43:01 | 显示全部楼层
本帖最后由 china0008 于 2011-3-9 13:53 编辑

思路是对的。  但是用 push的方便保存结果这里,忽略了一个问题。压栈是从高地址到低地址压的。也就是说你把 1+1 的结果放在了最后。这样跟上面的数据是不对齐的。还有一个问题 。 栈操作是以 字 单元为单位的   ,本题的结果一 字节 为单位。  栈空间明显不够用。 所以还是用mov指令吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-9 14:27:55 | 显示全部楼层
本帖最后由 超越自我 于 2011-3-9 22:52 编辑
assume cs:code ,ds:data ,ss:stack

data segment
        dw 1,2,3,4,5,6,7,8
        dw 1,2,3,4,5,6,7,8
data ends
   
stack segment
         dw 0,0,0,0,0,0,0,0
stack ends

code segment

start: mov ax,data
       mov ds,ax
       mov ax,stack
       mov ss,ax
       mov sp,16
       mov bx,0

       mov cx,8
s:     mov ax,[bx]
       add ax,[bx+16]
       push ax
       inc bx
       loop s
     
       mov ax,4c00h
       int 21h

code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-3-9 17:22:46 | 显示全部楼层
回复 1# 三好学生


    start: mov bx,0
              mov cx,8

         s:  mov ax,a
              mov ds,ax
              mov al,ds:[bx]   
              mov dx,b
              mov ds,dx        
              add al,ds:[bx]     ; a b段相加
         mov dx,c
              mov ds,dx
              mov ds:[bx],al
              inc dx
              loop s
         
              mov ax,4c00h
              int 21h
   
         code ends
      
经过老师的提示,我先把a b段相加 然后在把相加后的al字节数据在放到c 段里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-15 10:57:19 | 显示全部楼层
我是这样做的,不知道对不对:
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
c      segment
   db 0,0,0,0,0,0,0,0
c       ends
code  segment
  start: mov ax,b
           mov es,ax
           mov ax,c
           mov ds,ax
           mov bx,0
           
           mov cx,8
      s:  mov al,es:[bx]
           mov [bx],al
           inc  bx
           loop s
          mov bx,0
          mov cx,8
     s1:   mov al,cs:[bx]
           add  [bx],al
           inc   bx
           loop s1
          mov ax,4c00h
          int   21h
    code  ends
   end  start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-15 11:12:32 | 显示全部楼层
本帖最后由 china0008 于 2011-3-15 13:29 编辑

第六题我是这样做的,请各位老师指教
assume  cs:code
   a    segment
     dw   1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
    a    ends
    b    segment
     dw   0,0,0,0,0,0,0,0
    b    ends
   code  segment
start:   mov ax,cs
            mov ss,ax
            mov sp,48
            mov bx,0
            mov cx,8
     s:    push cs:[bx]
            add bx,2
            loop s
            mov ax,4c00h
            int  21h
    code  ends
    end   start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-15 13:33:11 | 显示全部楼层
楼上做的没错。完全正确。你不使用ds是为了减少代码长度吧。呵呵。很好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-10 11:35:26 | 显示全部楼层
3楼的 inc bx是不是应该改为(bx) = (bx) + 2?
6楼:a,b段的段地址是CS的段地址吗?也就是说SS段里存放的好像不是1,2,。。。0ffh ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-2 18:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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