实验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:codea 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
Ъγ:_小ツ雨oο 发表于 2014-8-14 12:52
为什么不能用C?要用cc?我就这里郁闷
在汇编语言中给段起名字即段名给变量起名字即变量名都要注意不要和 编译器、指令、寄存器等 重复造成程序出错 c 就是因为这个问题。呵呵! 本帖最后由 流行语 于 2014-8-14 07:46 编辑
请帖代码,你这没有代码怎么看啊 没 复制好。。 下面是我写的
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 1图
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
;呵呵,有问题, 再交流啊!! swsm 发表于 2014-8-14 12:46
;呵呵,有问题, 再交流啊!!
为什么不能用C?要用cc?我就这里郁闷 首先你的代码有问题,楼上已经解决。其次是为什么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]