1个回答
展开全部
; 下面的程序是16位汇编,编译通过,运行正确。
; Program Name: Digi_ASC.ASM
Digi_ASC SEGMENT
ASSUME CS:Digi_ASC,DS:Digi_ASC
ORG 100H
Start: JMP Begin
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
; 用法:GetCursor
GetCursor Macro
PUSH AX
PUSH BX
XOR BX,BX
MOV AH,3
INT 10H
POP BX
POP AX
EndM
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
; 用法:SetCursor Cursor_Row,Cursor_Col
SetCursor Macro Cursor_Row,Cursor_Col
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
EndM
Accept_Num DB 'Please input a number(0-9),Press Esc to Exit:$'
DigitalChr DB 'The ASCII of '
DigASCII DB 0,' is ',2 DUP(' '),'H.$' ; 数字的ASCII数字
ASCII_Tab DB '0123456789'
Exit_Mark DB 0
; Subroutine
GLOBAL Get_Num:NEAR ;从键盘接受一个数字
Get_Num Proc Near
MOV AH,9
INT 21H
@@InputChr:
MOV AH,1
INT 21H
CMP AL,27 ;Esc?
JZ @@Set_Exit
CMP AL,'0'
JB @@InputChr
CMP AL,'9'
JG @@InputChr
RET
@@Set_Exit:
INC Exit_Mark ;置退出标志
Ret
Get_Num EndP
Begin: MOV AX,3
INT 10H ;设置视频显示方式为80x25 16色文本方式
AcceptNum:LEA DX,Accept_Num ;提示输入一个1位数字符串地址
Call Get_Num ;从键盘接受一个数字
CMP Exit_Mark,1
JZ Exit_Proc ;若退出标志置位,则结束程序
MOV DigASCII,AL ;保存这个1位数
AND AL,0FH
LEA BX,ASCII_Tab
XLAT
CBW
MOV CX,4
SHL AX,CL
SHR AL,CL
OR AX,3030h
XCHG AH,AL
MOV WORD PTR DigASCII[5],AX
GetCursor
INC DH ;行号增1
INC DH ;行号增1
SetCursor DH,0
LEA DX,DigitalChr ;显示这个数的ASCII码
MOV AH,9
INT 21H
GetCursor
INC DH ;行号增1
INC DH ;行号增1
SetCursor DH,0
JMP AcceptNum
Exit_Proc:MOV AX,4C00H ;结束程序
INT 21H
Digi_ASC ENDS
END Start
补充回答:第二题,请另行提问。
; Program Name: Digi_ASC.ASM
Digi_ASC SEGMENT
ASSUME CS:Digi_ASC,DS:Digi_ASC
ORG 100H
Start: JMP Begin
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
; 用法:GetCursor
GetCursor Macro
PUSH AX
PUSH BX
XOR BX,BX
MOV AH,3
INT 10H
POP BX
POP AX
EndM
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
; 用法:SetCursor Cursor_Row,Cursor_Col
SetCursor Macro Cursor_Row,Cursor_Col
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
EndM
Accept_Num DB 'Please input a number(0-9),Press Esc to Exit:$'
DigitalChr DB 'The ASCII of '
DigASCII DB 0,' is ',2 DUP(' '),'H.$' ; 数字的ASCII数字
ASCII_Tab DB '0123456789'
Exit_Mark DB 0
; Subroutine
GLOBAL Get_Num:NEAR ;从键盘接受一个数字
Get_Num Proc Near
MOV AH,9
INT 21H
@@InputChr:
MOV AH,1
INT 21H
CMP AL,27 ;Esc?
JZ @@Set_Exit
CMP AL,'0'
JB @@InputChr
CMP AL,'9'
JG @@InputChr
RET
@@Set_Exit:
INC Exit_Mark ;置退出标志
Ret
Get_Num EndP
Begin: MOV AX,3
INT 10H ;设置视频显示方式为80x25 16色文本方式
AcceptNum:LEA DX,Accept_Num ;提示输入一个1位数字符串地址
Call Get_Num ;从键盘接受一个数字
CMP Exit_Mark,1
JZ Exit_Proc ;若退出标志置位,则结束程序
MOV DigASCII,AL ;保存这个1位数
AND AL,0FH
LEA BX,ASCII_Tab
XLAT
CBW
MOV CX,4
SHL AX,CL
SHR AL,CL
OR AX,3030h
XCHG AH,AL
MOV WORD PTR DigASCII[5],AX
GetCursor
INC DH ;行号增1
INC DH ;行号增1
SetCursor DH,0
LEA DX,DigitalChr ;显示这个数的ASCII码
MOV AH,9
INT 21H
GetCursor
INC DH ;行号增1
INC DH ;行号增1
SetCursor DH,0
JMP AcceptNum
Exit_Proc:MOV AX,4C00H ;结束程序
INT 21H
Digi_ASC ENDS
END Start
补充回答:第二题,请另行提问。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询