三好学生 发表于 2011-3-9 13:22:19

实验题5

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:
            mov dx,b
            mov ds,dx
            add al,ds:
            push al
            inc dx
            loop s
         
            mov ax,4c00h
            int 21h
         code ends
end start
                          

china0008 发表于 2011-3-9 13:43:01

本帖最后由 china0008 于 2011-3-9 13:53 编辑

思路是对的。但是用 push的方便保存结果这里,忽略了一个问题。压栈是从高地址到低地址压的。也就是说你把 1+1 的结果放在了最后。这样跟上面的数据是不对齐的。还有一个问题 。 栈操作是以 字 单元为单位的   ,本题的结果一 字节 为单位。栈空间明显不够用。 所以还是用mov指令吧。

超越自我 发表于 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,
       add ax,
       push ax
       inc bx
       loop s
   
       mov ax,4c00h
       int 21h

code ends

end start

三好学生 发表于 2011-3-9 17:22:46

回复 1# 三好学生


    start: mov bx,0
            mov cx,8

         s:mov ax,a
            mov ds,ax
            mov al,ds:   
            mov dx,b
            mov ds,dx      
            add al,ds:   ; a b段相加
         mov dx,c
            mov ds,dx
            mov ds:,al
            inc dx
            loop s
         
            mov ax,4c00h
            int 21h
   
         code ends
      
经过老师的提示,我先把a b段相加 然后在把相加后的al字节数据在放到c 段里面

77mwj 发表于 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
codesegment
start: mov ax,b
         mov es,ax
         mov ax,c
         mov ds,ax
         mov bx,0
         
         mov cx,8
      s:mov al,es:
         mov ,al
         incbx
         loop s
          mov bx,0
          mov cx,8
   s1:   mov al,cs:
         add,al
         inc   bx
         loop s1
          mov ax,4c00h
          int   21h
    codeends
   endstart

77mwj 发表于 2011-3-15 11:12:32

本帖最后由 china0008 于 2011-3-15 13:29 编辑

第六题我是这样做的,请各位老师指教
assumecs: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
   codesegment
start:   mov ax,cs
            mov ss,ax
            mov sp,48
            mov bx,0
            mov cx,8
   s:    push cs:
            add bx,2
            loop s
            mov ax,4c00h
            int21h
    codeends
    end   start

china0008 发表于 2011-3-15 13:33:11

楼上做的没错。完全正确。你不使用ds是为了减少代码长度吧。呵呵。很好。

871982921 发表于 2011-4-10 11:35:26

3楼的 inc bx是不是应该改为(bx) = (bx) + 2?
6楼:a,b段的段地址是CS的段地址吗?也就是说SS段里存放的好像不是1,2,。。。0ffh ?
页: [1]
查看完整版本: 实验题5