
程序如下:
;--------------------------------------------------------------------
DATA SEGMENT
; 数据表格
TABLE DW 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
DATA ENDS
;--------------------------
STACK SEGMENT
DW 128 DUP(0)
STACK ENDS
;--------------------------
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, SS: STACK
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
M_LOOP:
MOV AH, 1
INT 21H
CMP AL, 1BH
JZ EXIT
CMP AL, 30H
JL M_LOOP
CMP AL, 39H
JG M_LOOP
SUB AL, 30H
;------------------------------
MOV BX, TABLE
PUSH CX
SHL AL, 1
MOV AH, AL
INC AH
XLAT
MOV CL, AL
MOV AL, AH
XLAT
MOV CH, AL
MOV AX, CX
POP CX
;------------------------------
CALL CR_LF
CALL OUT_AX
CALL CR_LF
JMP M_LOOP
;------------------------------
EXIT:
MOV AX, 4C00H ;EXIT TO OPERATING SYSTEM
INT 21H
;--------------------------------------------
OUT_AX PROC NEAR
PUSH BX
MOV DL, 0
CALL OUT_ASC
MOV BL, 100
DIV BL
MOV DL, AL
CALL OUT_ASC
MOV AL, AH
XOR AH, AH
MOV BL, 10
DIV BL
MOV DL, AL
CALL OUT_ASC
MOV DL, AH
CALL OUT_ASC
POP BX
RET
OUT_AX ENDP
;--------------------------------------------
OUT_ASC PROC NEAR
ADD DL, 30H
CALL OUT_DL
RET
OUT_ASC ENDP
;--------------------------------------------
CR_LF PROC NEAR
MOV DL, 10
CALL OUT_DL
MOV DL, 13
CALL OUT_DL
RET
CR_LF ENDP
;--------------------------------------------
OUT_DL PROC NEAR
PUSH AX
MOV AH, 02H
INT 21H
POP AX
RET
OUT_DL ENDP
;--------------------------------------------
CODE ENDS
END START
------------------------------------------------------------------
; 下面的程序是16位汇编,编译通过,运行正确。
; Program Name: Digi_ASCASM
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
补充回答:第二题,请另行提问。
问题出在这里
THREE: MOV MIN,CL
XLAT
AND AL,0FH
MOV AL,MIN
MOV DL,AL
MOV AH,02H
INT 21H
在你调用XLAT的时候,你需要把你要查表的东西放到AL里面,所以你可以改成这样
THREE: MOV MIN,CL
MOV AL,CL
XLAT
MOV DL,AL
MOV AH,02H
INT 21H
以上就是关于用汇编语言编写程序,建立一数据表,表中存放1-9的平方,查表求某数字的平方。全部的内容,包括:用汇编语言编写程序,建立一数据表,表中存放1-9的平方,查表求某数字的平方。、汇编语言程度题:从键盘上输入字符0~9,要求从屏幕上输出其ASCII值(使用查表程序)、一个汇编语言程序的问题,高分悬赏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)