假设数据段有9个有符号数: NUM DB -19,255,100,125,76,-120,61,81,30请编写一个程序实现:找出真值最小数,并将其送到附加段MIN单元。统计负数的个数,并以二进制的形式显示在屏幕上。显示格式为:NUMBER=XXXXXXXXB.
时间: 2023-06-26 21:03:43 浏览: 266
以下是使用汇编语言实现的程序,可以实现上述功能:
```
assume cs:codesg, ds:dataseg, ss:stackseg
dataseg
NUM DB -19, 255, 100, 125, 76, -120, 61, 81, 30
MIN DB ?
NEG_COUNT DB ?
BIN_COUNT DB 8 DUP(0)
codesg
start:
mov ax, dataseg
mov ds, ax
; 找出真值最小数
mov al, NUM
mov bl, al
neg al
cmp al, bl
jle found_min
mov al, bl
found_min:
mov MIN, al
; 统计负数的个数
mov CX, 9
mov BX, 0
mov SI, 0
count_neg:
mov al, NUM[SI]
cmp al, 0
jge not_neg
inc BX
not_neg:
inc SI
loop count_neg
mov NEG_COUNT, BX
; 将负数个数转换为二进制并显示在屏幕上
mov al, NEG_COUNT
mov bl, 2
mov cx, 8
mov si, OFFSET BIN_COUNT
bin_count_loop:
xor ah, ah
div bl
or ah, 30h
mov [si], ah
inc si
loop bin_count_loop
mov ah, 09h
mov dx, OFFSET BIN_COUNT
int 21h
mov ah, 4Ch
int 21h
end start
```
程序首先将数据段的地址赋值给 DS 寄存器。然后通过比较每个有符号数的真值大小,找出真值最小的数,并将其存放在 MIN 变量中。
接着程序使用循环计算出数据段中负数的个数,并将结果存放在 NEG_COUNT 变量中。
最后,程序将负数个数转换为二进制并显示在屏幕上,使用 DOS 的 0x09 中断来实现。程序结束时使用 0x4C 中断退出。
阅读全文