80x86汇编习题
题目描述:输入两个字数据(16位的数)X,Y,计算Z=X+Y,并把Z的结果显示出来。提示:X,Y的输入可以是任何进制。
思路:
1,总共输入两个数
2,每个数前面用B,D,H选择进制
3,放入寄存器进行加法
4,用十六进制显示Z的结果
DATAS SEGMENTX DW ?Y DW ?Z DW ?
DATAS ENDSSTACKS SEGMENTDW 100H DUP(?)TOP LABEL WORD
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AXLEA SP,TOP ;初始化MOV DI,2 ;总共输入两个数;选择二进制,十进制,十六进制输入CHOOSE:MOV AH,1INT 21HCMP AL,'B'JE BINARYCMP AL,'D'JE DEXIMALCMP AL,'H'JE HEX;二进制输入
BINARY:XOR BX,BXMOV CX,16 ;输入16位
IN1:MOV AH,1INT 21H ;逐个输入CMP AL,0DH ;遇到回车提前结束JE CONTROL ;去控制台RCR AL,1 ;右移一位到CFRCL BX,1 ;把CF的左移到最后一位LOOP IN1 ;循环,最终存到BXDEC DIJZ CONTROL ;结束了去控制台;十进制输入
DEXIMAL:XOR BX,BXMOV SI,10
INPUT:MOV AH,1INT 21HCMP AL,0DH ;遇到回车去控制台JE CONTROL ;遇到负号,去负数输入CMP AL,'-'JE NINPUTAND AX,0FHXCHG AX,BXMUL SIADD BX,AXJMP INPUTNINPUT:MOV AH,1INT 21HCMP AL,0DH ;遇到回车,去求补JE NEGGAND AX,0FHXCHG AX,BXMUL SIADD BX,AXJMP NINPUT
NEGG:NEG BXJMP CONTROL ;求补完再去控制台;十六进制输入
HEX:XOR BX,BX
HL:MOV AH,1INT 21HCMP AL,0DHJE CONTROL ;遇到回车去控制台SUB AL,30HCMP AL,9 ;如果是字母,减7JB INBXSUB AL,7
INBX: ;存入BXMOV CL,4SHL BX,CLAND AX,0FHADD BX,AXJMP HLCONTROL:DEC DICMP DI,0 ;控制台看看输入了几个数JE OPERATE ;第二个数就去加法运算MOV X,BX ;第一个数保存到XJMP CHOOSE ;继续输入第二个数OPERATE: ;加法运算MOV Y,BXADD BX,X;以十六进制输出结果DISP:MOV CH,4 ;循环次数L1:MOV CL,4ROL BX,CLMOV DX,BXAND DX,0FHADD DL,30HCMP DL,39HJBE PRINTITADD DL,7
PRINTIT:MOV AH,2INT 21HDEC CHJNZ L1MOV AH,4CHINT 21H
CODES ENDSEND START