永发信息网

微机原理与接口技术 编写1个程序,统计寄存器AX中二进制位1的个数,结果以1位十六进制数形式显示到屏幕上

答案:2  悬赏:20  手机版
解决时间 2021-04-16 09:01
微机原理与接口技术 编写1个程序,统计寄存器AX中二进制位1的个数,结果以1位十六进制数形式显示到屏幕上
最佳答案
code segment
assume cs:code
start:
mov ax,0ffffh ;测试用的,你可以修改为任何有效的值
mov cl,16 ;ax是一个字,有16位二进制
mov dl,0 ;用于累加ax中1的个数
a:
rol ax,1 ;循环左移1称,16次循环后复原
jnc next ;该位是0,则CF=0,这里就是测试CF的值,为0则跳转不累加
inc dl ;CF=1时,dl+1
next:
loop a ;循环结构

add dl,30h ;将dl的值转为ASCII码
cmp dl,'9' ;大于9则是A-F或者10
jbe print ;小于或者等于0则不必再转化ASCII码
add dl,7 ;如果是A-F则转化
cmp dl,'F' ;这步关键,如果AX的值是0FFFFH,则dl=16=10H,没有这步将会输出G
ja print_10 ;AX=0FFFFH则跳转进行特殊处理
print:
mov ah,02h
int 21h
print_10:
mov dl,31h ;特殊情况只有一种,即dl=10H,故只要两次分别输出字符1和0即可
mov ah,02h
int 21h
mov dl,30h
int 21h

mov ah,4ch
int 21h
code ends
end start
全部回答
assume cs:code, ds:data
data segment
tb db '0123456789ABCDEF'
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 3ch
mov cx, 16
xor bx, bx
nx:
rol ax, 1
test al, 1
jz zero
inc bx
zero:
loop nx
mov ax, bx
lea bx, tb
xlat
mov ah, 2
mov dl, al
int 21h
mov ax, 4c00h
int 21h
code ends
end start
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
老人时常拉肚子、时常干燥
sj小说打包
南天不夜城我想知道这个在什么地方
oncology reports中draft状态是什么意思
大学班级标语,迎十佳大学生 标语横幅 宣传语
QQ空间添加网络歌曲
幸福之门在哪里
QQ空间背景音乐链接 李圣杰 靠近 擦肩而过 光
算式中,数字换位,符号怎么变?
天翼平胜手机卖场我想知道这个在什么地方
娜美会嫁给香吉士吗
Ghost XP Sp3 电脑城国庆60周年纪念版 v16.0
1万2在南京能买到 真货男性欧米茄机械表吗
关于质朴纯真的名言,有没有关于质朴自然的诗
六舒路/S258(路口)我想知道这个在什么地方
推荐资讯
停车场标识牌中的数字5表示什么意思
k262次列车今天几点能到新乡火车站
問道一60級所有相性5 連滿 滿傷 粉多一條1100
我QQ上的人明明开通了魔法卡片我的好友里却不
白色皮鞋有彩色笔水怎么去掉
刚上幼儿园寄语简短的,幼儿小班升班简短祝福
五瓶海鲜夜市怎么去啊,有知道地址的么
我的QQ空间日志、相册有更新,为什么在好友那
历假过了几天,做B超才能看见出来
tmd是什么意思.?
动态桌面设置
凯迪拉克SRX好么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?