📄 digui.asm
字号:
;--数据段------------------------------------------------------------------
data segment ;定义作为数据段的逻辑段,段名为data
error db 'input error,input again',0dh,0ah,'$' ;定义要显示的字符error
data ends ;数据段结束
;--代码段------------------------------------------------------------------
code segment 'code' ;定义作为代码段的逻辑段,段名为code
assume cs:code,ds:data ;确定各个逻辑段的类型
start: mov ax,data ;程序开始点
mov ds,ax ;设置DS指向程序数据段的地址
start1: mov ah,01h
int 21h
mov bl,al
sub bl,30h
cmp bl,3
jb disp1
cmp bl,7
ja disp1
call change ;回车换行
call change
and cx,0000h ;将寄存器清零
and dx,0000h
mov ax,0001h
call digui ;调用子程序算阶乘
call zhuan ;转换成十六进制并输出
jmp endl
disp1: mov dx,offset error ;指定字符串error在数据段的偏移地址
mov ah,09h
int 21h
jmp start1 ;利用功能调用显示信息
endl: mov ax,4c00h
int 21h ;程序结束点,返回dos
;----递归算阶乘------------------------------------------
digui proc
mov cl,bl
push cx
sub bl,01h
cmp bl,01h
jnz next
jmp next1
next: call digui
next1: pop cx
;mov al,bl
mul cx
ret
digui endp
;--结果转换成十六进制并输出--------------------------------------
zhuan proc
push dx
mov dx,0000h
mov cx,16
div cx
cmp ax,00h
je next2
call zhuan
next2: cmp dl,09h ;小于等于9加30h,大于9加37h
jbe next3
add dl,37h
jmp next4
next3: add dl,30h
next4: mov ah,02h
int 21h
pop dx
ret
zhuan endp
;--定义子程序输出回车换行-----------------------------------------------
change proc ;定义过程,过程名为change
push ax
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
pop ax
ret ;子程序返回
change endp
code ends ;代码段结束
end start ;汇编结束,程序开始点为start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -