【发布时间】:2021-08-25 00:03:56
【问题描述】:
任务是获取十进制的用户输入,生成 16 位的二进制,然后找出二进制输出中 0 的数量。 找出二进制文件的第一部分似乎工作正常,但我在第二部分做错了什么?它显示的是总位数而不是 0。
示例:输入:3 输出:0000000000000011 0 的数量:14
include "emu8086.inc"
.model small
.stack 100h
.data
zeroes dw ?
.code
;First part, user input in decimal then generating the output in Binary, 16 bits. --Works FINE
mov ax, @data
mov ds, ax
call scan_num
printn
print "The binary is: "
mov bx, 16
_loop:
shl cx, 1
jc bin_1
putc '0'
dec bx
jnz _loop
jmp exit
bin_1:
putc '1'
dec bx
jnz _loop
;Second part, finding out the number of 0 bits in the binary output
mov cx, 16
up:
rol ax, 01h
inc bx
jmp next
next:
loop up
mov zeroes, bx
mov ax, bx
printn
print "The number of 0s: "
call print_num
exit:
mov ah, 4ch
int 21h
;define
define_print_num
define_print_num_uns
define_scan_num
【问题讨论】:
-
jmp next到next:是空操作;无论如何,执行都会落到下一条指令。而且您的第二部分中没有任何条件分支,也没有任何无分支读取 CF 的内容,如rol设置的那样以这种方式进行条件增量(例如adc bx, 0)。如果您在调试器中单步执行您的代码,应该很容易看出它只将 BX 计数到 16。