【个人笔记】汇编各进制输入与输出 |
您所在的位置:网站首页 › 十六进制的数字表示形式 › 【个人笔记】汇编各进制输入与输出 |
二进制转十六进制 这段汇编代码的主要功能是将寄存器BX中的16位数逐位按照十六进制逆时针旋转一圈(4位),并将结果打印在屏幕上,输出结果的形式为16进制数字。整个过程通过循环、移位、比较、加减来实现 1、 二进制转十进制 首先将二进制数补齐位数,首位如果是0就代表正整数,首位如果是1就代表负整数。 若首位是0的正整数,补齐位数以后,将二进制中的位数分别与对应的值相乘,然后相加得到的就为十进制。(从后往前数位数,从0开始数) 1、下面程序输入16位以内的二进制数(输入时回车作为输入结束),然后以有符号十进制数形式显示出来。将空格处指令补充完整,使得程序能完整实现所需要的功能。 CODE SEGMENT ORG 100H ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE MAIN PROC NEAR CALL I2;输入二进制 CALL D10;输出十进制 MOV AH,4CH INT 21H MAIN ENDP I2 PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI XOR BX,BX MOV CX,16;输入16位数 L20: MOV AH,1 INT 21H (CMP AL,0DH )……………①;回车 JE L21 CMP AL,30H;接收01 JB L20 CMP AL,31H JA L20 AND AX,01H;清除高八位 SHL BX,1 ADD BX,AX ( LOOP L20 )……………②;循环输入16个数 L21: MOV AX,BX;输入的二进制 POP DI POP SI POP DX POP CX POP BX RET I2 ENDP D10 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI ( MOV BX,AX )……………③ MOV AH,9 LEA DX,CRLF INT 21H OR BX,BX;是否负数 JNS L100;非负数跳转 MOV AH,2 mov dl,2dh )……………④;输出负号 INT 21H NEG BX L100: MOV AX,BX XOR CX,CX MOV SI,10 L101: XOR DX,DX ( DIV SI )……………⑤;将AX除以10,商在AX中,余数在DX中 PUSH DX;将余数压栈 INC CX;将CX寄存器加1(记录位数) CMP AX,0;获取商的值 JNZ L101 L102: POP DX;将栈顶元素弹出到DX寄存器 MOV AH,2 ( ADD DL,30H )……………⑥;将数字转换成字符 INT 21H LOOP L102 POP DI POP SI POP DX POP CX POP BX POP AX ( RET )……………⑦ CRLF DB 0DH,0AH,24H D10 ENDP CODE ENDS END MAIN十六进制转十进制 十六进制转换成十进制的公式是:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是了。 下面是一个.com文件格式的程序,完成从键盘上输入一个4位以内的16进制数,并以10进制形式显示出来。请在标号处填上缺少的指令(TEST1) HEX2DEC SEGMENT ORG 100H ASSUME CS:HEX2DEC,SS:HEX2DEC,DS:HEX2DEC,ES:HEX2DEC MAIN PROC NEAR XOR BX,BX;清零,将存储转换后的十进制 MOV CH,4;循环次数(输入4位以内) L1: MOV AH,1;键盘输入并回显 _____(1)_______INT 21H CMP AL,0DH;是否为回车 JE DISP10 CMP AL,30H;是否9 JBE L2;0-9为合法数字 CMP AL,41H;是否字母 JB L1;非法字符,重新输入 CMP AL,46H JBE L2;A-F CMP AL,61H;是否小写字母 JB L1 CMP AL,66H JA L1 SUB AL,20H;小写字母转换为大写 L2: SUB AL,30H;转换为对应的十进制数字 CMP AL,9 JBE L3;0-9数字 SUB AL,7;10-15字母转换 L3: MOV CL,4;循环 SHL BX,CL;为下个位的处理腾出空间 XOR AH,AH;防止移位溢出 ADD BX,AX;转换后的10进制数存储 ____(3)_________ DEC CH;处理下个字符前,循环计数器CH-1 JNZ L1 DISP10: LEA DX,CRLF MOV AH,9;显示回车 INT 21H OR BX,BX;判断是否小于0 JNS L4;不小于0时 MOV DL,2DH;负数,将“-”存储 MOV AH,2 INT 21H NEG BX;取反,把负数变正数 ;;准备十进制数输出显示操作 L4: XOR CX,CX;记录10进制数位数,初始化为0 MOV AX,BX;10进制数存储 L5: XOR DX,DX;存储被除数的余数 ____(4)________ MOV SI,10 DIV SI;把AX数除以10,商放AL,余数在DX PUSH DX INC CX;每除1次,代表位数+1 OR AX,AX;若商为0,准备输出 JZ L6 JMP L5 L6: POP DX;后进先出(高位) ____(5)___________ADD DL,30H;转ASCII MOV AH,2 INT 21H LOOP L6 INT 20H;程序正常结束 CRLF DB 0DH,0AH,24H;回车换行符加字符串结束符号’$’ MAIN ENDP HEX2DEC ENDS END MAIN十六进制转八进制 编一个程序完成从键盘上输入一个4位的16进制数,并以八进制形式显示出来。 Data segment Strlen db 5 Actlen db ? String db 5 dup(?) Data ends Code segment assume ds:Data, cs:Code start: mov ax,Data mov ds,ax lea dx,strlen mov ah,10 int 21h ;输入16进制数 mov ah,2 mov dl,0dh int 21h mov dl,0ah int 21h ;输出回车换行 mov ch,0 mov cl,actlen lea si,string mov bx,0 l: push cx mov dl,[si] cmp dl,'a' jb next1 sub dl,20h ;小写变大写 next1: cmp dl,'A' jb next2 sub dl,7 ;为大写字母变为相应的数值做准备 next2: sub dl,30h ;变为所相对应的数值 mov dh,0 mov cl,4 shl bx,cl ;4个16进制数刚好可以存放到一个字,在这里存放到bx add bx,dx ;依次推入到bx中 inc si pop cx loop l mov ax,bx ;以8进制形式输出 mov bx,8 mov cx,0 ldiv: mov dx,0 div bx push dx inc cx cmp ax,0 jz toPrint jmp ldiv toPrint: pop dx add dl,30h mov ah,2 int 21h loop toPrint mov ah,4ch int 21h Code ends end start
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |