📄 prtint16.asm
字号:
;程序模板
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0) ;初始化堆栈大小为100
SSEG ENDS
DSEG SEGMENT
;数据段:在此处添加程序所需的数据
DSEG ENDS
ESEG SEGMENT
;附加段:在此处添加程序所需的数据
ESEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:ESEG, ss:SSEG
MAIN PROC ;主程序入口
mov ax, dseg
mov ds, ax
mov es, ax
;此处添加主程序代码
mov ax, -2504
CALL PrtInt16
MOV AH, 01H
INT 21H
mov ax, 4c00h ;程序结束,返回到操作系统系统
int 21h
MAIN ENDP
;打印16位整数的函数, 参数放在AX中
PrtInt16 PROC
MOV CX, 0
CMP AX, 0
JG greater0
JZ equal0
JL less0
greater0:
jmp signDealEnd
equal0:
jmp signDealEnd
less0:
PUSH AX
MOV DL, '-'
MOV AH, 02H
INT 21H
POP AX
NOT AX ; 取反加1得相反数
INC AX
jmp signDealEnd
signDealEnd:
MOV BX, 10
nextAX:
MOV DX, 0
DIV BX ;除以十
PUSH DX ;余数放在DL中 (压栈保存)
INC CX
CMP AX, 0
JNZ nextAX
; 下面依次从栈中弹出并打印数字
CLD
nextCX:
CMP CX, 0
JZ prtStkEnd ;为0表示打印结束
POP DX ;打印栈顶
ADD DL, '0'
MOV AH, 02H
INT 21H
DEC CX
JMP nextCX
prtStkEnd:
ret
PrtInt16 ENDP
CSEG ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -