怎么没人做第二题呢?大概还是冷清的原因。
根据题意,这题首先要解决十六进制转十进制显示的问题。其次再是显示过滤后的数据。显示需要的数据真不需要排序,有两个方法解决:
1,查表法,由于是一个字节的数据,因此可以使用一个256字节的表格,通过一次性扫描,在表格里建立数据存在标志,显示是按顺序扫描表格只显示有标志的字节编号。优点是只需扫描一次,速度快,缺点是需要内存空间建立表格。
2,试探法,用一个计数器从0-255计数,逐个判断是否和数据缓冲里的数据相等,相等则显示,不等继续计数。优点是不需要多余内存空间,缺点是要扫描256次数据区。
下述用47行代码能满足楼主要求:
程序代码:
根据题意,这题首先要解决十六进制转十进制显示的问题。其次再是显示过滤后的数据。显示需要的数据真不需要排序,有两个方法解决:
1,查表法,由于是一个字节的数据,因此可以使用一个256字节的表格,通过一次性扫描,在表格里建立数据存在标志,显示是按顺序扫描表格只显示有标志的字节编号。优点是只需扫描一次,速度快,缺点是需要内存空间建立表格。
2,试探法,用一个计数器从0-255计数,逐个判断是否和数据缓冲里的数据相等,相等则显示,不等继续计数。优点是不需要多余内存空间,缺点是要扫描256次数据区。
下述用47行代码能满足楼主要求:
程序代码: code segment
assume cs:code,ds:code,es:code,ss:code
org 100h
start: xor bl,bl
cld
slp1: mov al,bl
mov di,offset buf1
mov cx,offset buf3+1
sub cx,di
repnz scasb
cmp cx,0
jz slp2
call hexdec
slp2: cmp bl,255
jz slp3
inc bl
jmp slp1
slp3: mov ax,4c00h
int 21h
hexdec: pushf ;一个字节的十六进制转换为十进制并显示出来,待转换数据在ax中
push dx ;根据本程序完全不需要push dx,但写函数起码的习惯是保存要用的寄存器
push di
mov di,offset buf3+3
std
hdlp2: mov byte ptr[di],20h
xor ah,ah
cmp ax,0
jz hdlp1 ;ax=0转换结束
div buf4
xchg al,ah
add al,'0'
stosb
xchg al,ah
jmp hdlp2
hdlp1: mov ah,9
mov dx,di
int 21h
pop di
pop dx
popf
ret
buf1 db 3,12,14,15,17,19,22,23,88,99,101,105,106,109,202
buf2 db 1,3,5,6,10,12,14,18,19,21,22,45,101,103,105,106,109
buf3 db 4 dup(20h),'$'
buf4 db 10 ;除数
code ends
end start

能编个毛线衣吗?









厉害!