![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/bba1cd11728b4710f150bb33cfcec3fdfd0323d5?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
这题出的不严谨,真不像是解究逻辑的写程序的人出的题。
把buf开始的50个单元中的正数...
这话怎么理解?是理解成这50个数都是正数,还是这50个数中有正有负,只对其中的正数进行处理?
简单起见,程序采用了全部是正数的理解。
assume cs:cseg, ds:dseg
dseg segment
buf db 90,91,92,93,94,95,96,97,98,99
db 80,81,82,83,84,85,86,87,88,89
db 56,57,58,59,60,61,62,63,64,65
db 46,47,48,49,50,51,52,53,54,55
db 26,27,28,29,30,31,32,33,34,35
len equ $-buf
buf1 db len dup(0)
dseg ends
cseg segment
start:
mov ax, dseg
mov ds, ax
mov cx, len
mov si, offset buf
mov di, offset buf1
mov ah,0
$0:
mov al, [si]
call con2bcd
mov [di], al
inc si
inc di
loop $0
mov dx, len
mov si, offset buf1
mov ah,0eh
$1:
mov cx, 10
$2:
mov bl, [si]
call printbcd
inc si
dec cx
jnz $3
mov al,0dh
int 10h
mov al,0ah
int 10h
dec dx
jnz $1
jmp $4
$3:
dec dx
jnz $2
$4:
mov ah,4ch
int 21h
;convert(al) to BCD code, make sure (al)<100
;return in (al)
con2bcd proc near
mov bx, 10
c0:
xor dx, dx
div bx
push dx
cmp ax, 0
jnz c0
pop bx
mov ah, bl ;
pop bx
mov al, bl
push cx
mov cl, 4
shl al, cl
shr ax, cl
pop cx
ret
con2bcd endp
;param in (bl)
printbcd proc near
push cx
mov cl,4
mov al, bl
shr al, cl
xor al, 30h
int 10h
mov al, bl
and al, 0fh
xor al, 30h
int 10h
mov al, 20h
int 10h
pop cx
ret
printbcd endp
cseg ends
end start