Assembly language realizes the square value of numbers 1-9

One code implementation

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

Two running results
Insert picture description here
Insert picture description here
Three debugging results
Insert picture description here
Find the address of the next sentence that you want to verify that YY corresponds to 002A.
Insert picture description here
Enter the command g=0000 002A, enter X=2, AX=0004, and the result is correct.
Input instruction d ds:0000 corresponds to 0030 address, when input X=2, output 04H, the program result is correct

Guess you like

Origin blog.csdn.net/weixin_43789635/article/details/112981729