汇编语言 您所在的位置:网站首页 输出寄存器的符号表示 汇编语言

汇编语言

2024-07-16 02:25| 来源: 网络整理| 查看: 265

文章目录 将BX中的无符号数以二进制形式输出将BX中的无符号数以八进制形式输出将BX中的无符号数以十六进制形式输出将BX中的无符号数以十进制形式输出将BX中的有符号数以十进制形式输出

将BX中的无符号数以二进制形式输出

利用移位指令会影响CF,默认dl=30h(数字0),用adc dl,0加上CF的值,直接用2号功能输出。

data segment data ends stack segment stack dw 100 dup (?) top label word stack ends code segment assume cs:code,ds:data,ss:stack main proc far mov ax,data mov ds,ax mov ax,stack mov ss,ax lea sp,top mov bx,-458 ;1111 1110 0011 0110 mov cx,16 ;bx16位,循环16次 L1: rol bx,1 ;左边的先显示,循环左移 mov dl,30h ;默认dl显示0 adc dl,0 ;带进位加法 mov ah,2 int 21h loop L1 mov ah,4ch int 21h main endp code ends end main 将BX中的无符号数以八进制形式输出

在这里插入图片描述 二进制转换成八进制:

从低到高,3位二进制转换成1位八进制

bx为16位,能转换成6位8进制:最高位0/1+5位8进制。

还是利用移位指令ROL,先把最高位移出,直接输出;

循环5次,每次ROL3位,把bx的最高3位移到最低3位,取出bl,屏蔽bl的高5位,显示输出。

data segment data ends stack segment stack dw 100 dup (?) top label word stack ends code segment assume cs:code,ds:data,ss:stack main proc far mov ax,data mov ds,ax mov ax,stack mov ss,ax lea sp,top mov bx,-958 ;1111 1100 0100 0010(二进制)/176102(八进制) rol bx,1 ;第一位直接输出 mov dl,30h ;默认为数字0 adc dl,0 mov ah,2 int 21h mov cx,5 ;还有5位八进制数 L1: push cx ;因为bx要循环左移3次,要用到cl,保护cx进栈 mov cl,3 ;bx循环左移3次 rol bx,cl mov dl,bl ;把bx的低8位放到dl and dl,7 ;屏蔽高5位 add dl,30h ;转换成数字 mov ah,2 ;显示输出 int 21h pop cx ;还原cx,继续循环 loop L1 mov ah,4ch int 21h main endp code ends end main 将BX中的无符号数以十六进制形式输出

跟八进制同理,十六进制输出要注意:0-9和A-F的输出

显示0-9,在原来的基础上+30H

10/0AH,要输出A/41H/65 ———— 二者相差65-10=55=37H 显示A-F,在原来的基础上+37H

data segment data ends stack segment stack dw 100 dup (?) top label word stack ends code segment assume cs:code,ds:data,ss:stack main proc far mov ax,data mov ds,ax mov ax,stack mov ss,ax lea sp,top mov bx,-6908 ;1110 0101 0000 0100(二进制)/E504(十六进制) mov cx,4 L1: push cx mov cl,4 rol bx,cl mov dl,bl and dl,0fh ;屏蔽高4位 cmp dl,9 ja L2 add dl,30h ;输出0-9 jmp print L2: add dl,37h ;输出A-F jmp print print: mov ah,2 int 21h pop cx loop L1 mov ah,4ch int 21h main endp code ends end main 将BX中的无符号数以十进制形式输出

核心思想:循环(BX)除以10,余数进栈,倒序输出

data segment data ends stack segment stack dw 100 dup (?) top label word stack ends code segment assume cs:code,ds:data,ss:stack main proc far mov ax,data mov ds,ax mov ax,stack mov ss,ax lea sp,top mov bx,65535 ;无符号数bx最大为65535 mov cx,0 ;统计余数的个数 mov si,10 ;想要用(dx,ax)除以10,得先把10放进16位的寄存器si mov ax,bx ;被除数(dx,ax) mov dx,0 L1: div si push dx ;把余数进栈 inc cx ;余数的个数+1 cmp ax,0 ;判断商是否为0,0退出,否则继续除10 je L2 mov dx,0 ;商在ax,余数在dx,下一次的被除数(dx,ax)要把dx清零 jmp L1 L2: pop dx ;因为每一次的余数为0-9,只存放在dl,直接pop dx,再用2号功能显示输出 add dl,30h ;转换成数字字符 mov ah,2 int 21h loop L2 mov ah,4ch int 21h main endp code ends end main 将BX中的有符号数以十进制形式输出

在这里插入图片描述

data segment data ends stack segment stack dw 100 dup (?) top label word stack ends code segment assume cs:code,ds:data,ss:stack main proc far mov ax,data mov ds,ax mov ax,stack mov ss,ax lea sp,top mov bx,-32768 mov cx,0 mov si,10 mov ax,bx mov dx,0 add ax,0 jns L2 ;符号位为0 neg ax ;符号位为1,求补 L1: div si push dx inc cx cmp ax,0 je exit1 mov dx,0 jmp L1 L2: div si push dx inc cx cmp ax,0 je exit2 mov dx,0 jmp L2 exit1: mov dl,'-' mov ah,2 int 21h exit2: pop dx add dl,30h mov ah,2 int 21h loop exit2 mov ah,4ch int 21h main endp code ends end main


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有