アセンブリ言語は、1〜9の数値の2乗値を実現します

1つのコード実装

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

2つの実行結果
ここに写真の説明を挿入
ここに写真の説明を挿入
3つのデバッグ結果
ここに写真の説明を挿入
YYが002Aに対応することを確認する次の文のアドレスを見つけます。
ここに写真の説明を挿入
コマンドg = 0000 002Aを入力し、X = 2、AX = 0004を入力すると、結果は正しいです。
入力命令dds:0000は0030アドレスに対応し、入力X = 2、出力04Hの場合、プログラム結果は正しい

おすすめ

転載: blog.csdn.net/weixin_43789635/article/details/112981729