回 帖 发 新 帖 刷新版面

主题:这个程序为什么错了????

.model small
         .stack
         .data
count    equ 10
array    db 12h,25h,0f0h,0a3h,68h,71h,0cah,0ffh,90h
result   db?
         .code
         .startup
         mov bx,offset array
         call checksuma
         mov result,al
         .exit 0
checksuma proc
          xor al,al
suma:     add al,[bx] 
          inc bx
          loop suma
          ret
checksuma endp
          end  
题目:设array是10个元素的数组,每个元素是8位数据.试用子程序计算数组元素的校验和,并将结果存入变量result中.所谓"校验和"是指不记进位的累加,常用于检查信息的正确性. 
我是菜鸟,我举双手双脚请各位高手帮我看一下错在哪.为什么到命令提示符里面调试不得呢???????
  

回复列表 (共3个回复)

沙发

三个错误:

一、.startup之后需要加上
     mov ax, DGROUP
     mov ds, ax

二、loop是以cx计算循环的次数的,你没有初始化cx,在call checksuma之前加一句mov cx, 10


三、使用简化段定义的时候,_DATA、_BSS、CONST和STACK几个段被组合为一个段组DGROUP,这时候你不要直接使用mov bx, offset array,因为offset返回的是相对于array所在段的偏移,而array在段组DGROUP中的偏移未必就是所在段的偏移,因此需要加上段超越前缀:mov bx, offset DGROUP: array

板凳

这样可以,masm5.0编译通过
.model small
         .stack
         .data
count    equ 10
array    db 12h,25h,0f0h,0a3h,68h,71h,0cah,0ffh,90h
result   db ?
         .code
         mov bx,offset array
         call checksuma
         mov result,al
     mov ax,4c00h
    int 21h    


checksuma proc
          xor al,al
suma:     add al,[bx] 
          inc bx
          loop suma
          ret
checksuma endp
          end

3 楼


高手们,我是汇编菜鸟,能不能把完全正确的程序发给我呀!!!在这里拜托各位高手了,[em18][em19]

我来回复

您尚未登录,请登录后再回复。点此登录或注册