Ъγ:_小ツ雨oο 发表于 2014-8-14 07:23:43

实验5,5我自己编写的就出错

实验5 编写、调试具有多个段的程序(5)程序如下,编写code段中代码,将a段和b段中的数据依次相加,将结果存到C段中。(三个程序) 程序一:两次循环assume cs:codea segment    db 1,2,3,4,5,6,7,8a endsb segment    db 1,2,3,4,5,6,7,8b endsc segment    db 0,0,0,0,0,0,0,0c endscode segmentstart: mov ax,a       mov ds,ax       mov ax,b       mov es,ax       mov bx,0       mov cx,8    s: mov al,       add es:,al       inc bx       loop s       mov ax,c       mov ds,ax       mov bx,0       mov cx,8   s0: mov al,es:       mov ,al       inc bx       loop s0    mov ax,4c00h    int 21hcode endsend start这是正确答案,下面是我写的assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 1,2,3,4,5,6,7,8
b ends
c segment
dw 0,0,0,0,0,0,0,0
c ends

code segment

strat:mov ax,a
      mov ds,ax

swsm 发表于 2014-8-14 07:23:44

Ъγ:_小ツ雨oο 发表于 2014-8-14 12:52
为什么不能用C?要用cc?我就这里郁闷

在汇编语言中给段起名字即段名给变量起名字即变量名都要注意不要和 编译器、指令、寄存器等 重复造成程序出错 c 就是因为这个问题。呵呵!

流行语 发表于 2014-8-14 07:45:41

本帖最后由 流行语 于 2014-8-14 07:46 编辑

请帖代码,你这没有代码怎么看啊

Ъγ:_小ツ雨oο 发表于 2014-8-14 12:02:59

没 复制好。。   下面是我写的
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 1,2,3,4,5,6,7,8
b ends
c segment
dw 0,0,0,0,0,0,0,0
c ends

code segment

strat:mov ax,a
      mov ds,ax
          mov ax,b
                mov es,ax
                mov bx,0
                mov cx,8
                s: mov bl,
                add es:,bl
                inc bx
                loop s
               
                mov ax,c
                mov ds,ax
                mov bx,0
                mov cx,8
                s0:mov bl,es:
                  mov bx,
                  inc bx
                  loop s0
                  
                  mov ax,4c00h
                  int 21h
                  code ends
                  end strat

Ъγ:_小ツ雨oο 发表于 2014-8-14 12:03:50

1图

swsm 发表于 2014-8-14 12:46:43


assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 1,2,3,4,5,6,7,8
b ends
cc segment               ;这里的 c 改为 cc ,c不能作为段标志。。。。
dw 0,0,0,0,0,0,0,0
cc ends

code segment

strat:       
                mov ax,a
                mov ds,ax
                mov ax,b
                mov es,ax
                mov bx,0
                mov cx,8

        s:                
                mov ax,       ; 用ax作为中转运算
                add es:,ax
                inc bx                ;这里要加两次bx ,因为你上面定义的都是dw 字数据。。
                inc bx
                loop s
               
                mov ax,cc                  
                mov ds,ax
                mov bx,0
                mov cx,8
        s0:
                mov ax,es:               ;这里也用ax进行中转
                mov ,ax
                inc bx                               ;因为是字数据所以也要bx + 2
                inc bx
                loop s0
                  
                mov ax,4c00h
                int 21h
code ends
end strat

;呵呵,有问题, 再交流啊!!

Ъγ:_小ツ雨oο 发表于 2014-8-14 12:52:54

swsm 发表于 2014-8-14 12:46
;呵呵,有问题, 再交流啊!!

为什么不能用C?要用cc?我就这里郁闷

流行语 发表于 2014-8-14 14:04:57

首先你的代码有问题,楼上已经解决。其次是为什么c不能作为数据段的标志,这个可能与编译器有关系。在masm6.15编译时会出现你的那个问题,可是用masm5.0编译的时候就没有问题。你试着用一下masm5.0编译器。
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends

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

c segment
dw 0,0,0,0,0,0,0,0
c ends

code segment
start:mov ax,a
        mov ds,ax
        mov ax,b
        mov es,ax
        mov bx,0
        mov cx,8
        s: mov al,;你在这里赋值给bx寄存器,在下面又inc bx,这怎么可以呢?
        add es:,al
        add bx,2          ;你定义的是dw,dw代表了两个字节,增加2
        loop s

        mov ax,c
        mov ds,ax
        mov bx,0
        mov cx,8
s0:mov al,es:;你在这里赋值给bx寄存器,在下面又inc bx,这怎么可以呢?
        mov ,al;这里也错了
        add bx,2;这里也错了
        loop s0

        mov ax,4c00h
        int 21h
code ends
end start
页: [1]
查看完整版本: 实验5,5我自己编写的就出错