axix005 发表于 2015-8-7 08:51:28

实验5.5,程序这样写可以吗?---新人可以一看解决方法有详细al,ax,add bx2,inc bx讲解

本帖最后由 axix005 于 2015-8-9 14:07 编辑

实验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,a
      mov ds,ax
      mov ax,b
      mov ss,ax
      mov ax,c
      mov es,ax
      mov bx,0

      mov cx,8
s:mov ax,ds:
add ax,ss:
add es:,ax
      inc bx
loop s
      

      mov ax,4c00h
      int 21h
code ends

end start


讲解在4楼

七煞 发表于 2015-8-7 14:52:11

我跟你的思路是一样的不过好像不行的样子,同求高手前辈指教

axix005 发表于 2015-8-7 22:37:10

七煞 发表于 2015-8-7 14:52
我跟你的思路是一样的不过好像不行的样子,同求高手前辈指教

怎么不行??

axix005 发表于 2015-8-9 13:50:45

用 MASM 5.0 编译一下,即可显示有错无错。

千万别用 MASM 6.0 以上的版本。

追问:
今天 02:29 masm能生成程序,就是不知道这样能不能达到问题目的

追答:
今天 10:50 S:
    MOV   AX, DS:----AX ?应该用 AL。
    ADD   AX, SS:
    ADD   ES:, AX----用 MOV 更符合题意。
    INC   BX
    LOOPS

程序结构正确。

只是,参加运算的,应该是字节,不是字。
那么,程序的 AX,可改为 AL。

追问:
26 分钟前 ADD   ES:, AX----用 MOV 更符合题意。--------明白了。把相加的结果移动到c段,是我没认真看题,哈哈谢谢指出

为什么ax不能参加运算???

a段和b段中的数据依次相加。。里面的是两个字节不是一个字吗?

呵呵,新人不明白麻烦大哥讲解了!!!!

追答:
11 分钟前 在 A 段、B 段,你所定义的数字,都是字节。

程序中,就应该用字节(如 AL),进行计算。
--------------------
你要是用 DW 定义,这就是字,才应该用 AX 计算加法。
此时,INCBX,应该改为:ADDBX, 2。

七煞 发表于 2015-8-12 14:56:10

原来如此多谢指教,自己又张姿势了{:1_1:}
看不清楚题目成了自己的老毛病了
页: [1]
查看完整版本: 实验5.5,程序这样写可以吗?---新人可以一看解决方法有详细al,ax,add bx2,inc bx讲解