一 代码实现
DATA SEGMENT
INPUT DB 'PLEASE INPUT X(0~9):$'
RESULT DB 'The square value of X is:$'
TABLE DB 0,1,4,9,16,25,36,49,64,81
XX DB ?
YY DB ?
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS;将DS寄存器推入堆栈
MOV AX,0;对AX清零
PUSH AX;将AX寄存器推入堆栈
MOV AX,DATA;把数据放到AX
MOV DS,AX;把AX的内容传到DS
MOV AH,9;执行命令9
LEA DX,INPUT;将INPUT的地址传到DX
INT 21H;中断调用显示input的字符串
MOV AH,1;键盘输入数字功能调用
INT 21H;中断调用读入键值,并显示该字符
AND AL,0FH;将AL中输入的数字ASIⅡ码转为原来的十进制数字
MOV XX,AL;取AL已转为十进制的数字给xx(输入值)
MOV BX,OFFSET TABLE;取了TABLE的偏移地址给BX
MOV AH,0;对AH清零
MOV AL,XX;把xx的数给AL
ADD BX,AX;BX与AX相加
MOV AL,[BX];把以BX为偏移地址的值赋给AL
MOV YY,AL;将BX的内容赋给YY(平方值)
MOV AH,2;执行命令2
MOV DX,0AH;换行
INT 21H
MOV AH,9;执行命令9
LEA DX,RESULT;将RESULT的地址传到DX
INT 21H;显示结果提示字符串
MOV CL,10 ;除数10
MOV AL,YY;把YY存的数传给AL以做除法运算
MOV AH,0;高位清零
DIV CL;除法运算,商存在AL中
ADD AL,48;转ASCII码,显示结果对应字符
MOV DL,AL;把已转成对应字符的ASCII码传到DL准备显示
MOV CL,AH;把余数即个位数传给CL
MOV AH,2;执行命令2
INT 21H;中断调用显示十位数
MOV AH,2;执行命令2
ADD CL,48;转ASCII码,显示结果对应字符
MOV DL,CL;把已转成对应字符的ASCII码传到DL准备显示
INT 21H;终端调用显示十位数
RET
MAIN ENDP
CODE ENDS
END MAIN
二 运行结果
三 调试结果
找到想要验证YY对应下一语句的地址是002A
输入指令g=0000 002A,输入X=2,AX=0004,结果正确。
输入指令 d ds:0000对应0030地址,当输入X=2时,输出04H,程序结果正确