level 3
程序如下,用子程序实现20个字数据相加
data segment
DAT DW 1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888h,9999h
dw 0111h,1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888h,9999h,0111h
S dt 0
DATA ENDS
CODE SEGMENT
assume cs:code,ds:data,ss:stack
start:mov ax,data
mov ds,ax
call ad
ad proc near
mov si,offset dat
mov cx,19
l:mov ax,[si]
add s,ax
inc si
inc si
loop l
ret
code ends
end start
2018年06月09日 11点06分
4
level 13
1.
楼主的编译器不支持DT,或者,s被用作保留字,但不管如何,这个题目并不需要DT
19个数,就算全是0ffffh,也不会大于 19 * 0ffffh, dd就可以了.
2.
没有定义stack段,但却assume了...干脆删了 [ ,ss:stack ] 吧
3.
没有结束返回dos的代码,连起码的hlt也没有.无可避免死循.
call ad后,加2句
mov ah,4ch
int 21h
4.
加法不是随便加了就算,要考虑进位,否则永远都在低位打转.
5.
s和ax型别不符,不可以相加.
6. ad proc near之后没有结束标志
4,5,6合并修正
ad proc near
mov si,offset dat
mov cx,19
L:
mov ax,[si]
add word ptr s,ax ;型别一致
adc word ptr s+2,0 ;带进位加
inc si
inc si
loop L
ret
ad endp ;程束程序标志
2018年06月09日 12点06分
5