汇编语言计算5!+4!+3!+2!+1!并将结果显示在屏幕上

data segment
N dw 5
sum dw 0
data ends

code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
s1:mov cx,N
mov ax,1
mov bx,1
again:mul bx
inc bx
loop again
add sum,ax
sub N,1
cmp N,1
jnb s1
mov dl,sum

mov ax,0200h
int 21h
mov ah,4ch
int 21h
code ends
end start
这是我的程序,请问有什么错吗,怎么改

mov dl,sum       ; 除了这里错误,其它的没问题。汇编学得不错
mov ax,0200h   ; 错误1: sum 是dw类型,dl是byte类型,数据类型与寄存器不匹配。
int 21h              ;错误2:  21H中断的2#子功能,是输出一个字符到屏幕上,不是把你的结果输出                          ;到屏幕上

;正确做法,写一个打印10进制数的函数,调用这个函数

; print (ax) on screen
print proc near
  mov bx, 10
  mov cx, 0
Q0:
  xor dx, dx
  div bx
  xor dx, 0e30h
  push dx
  inc cx
  cmp ax, 0
  jnz Q0
Q1:
  pop ax
  int 10h    ;这里我使用了int 10h的0eH调用,和int 21h的2号功能是一致的。
  loop Q1    ;除了参数不同,你也可以改成21H的2号调用
  ret
print endp

;mov dl,sum
;mov ax,0200h
;int 21h
;这三行替换成
mov ax, sum
call print

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-10
干啥的范德萨发的说法
相似回答