怎么没人做第二题呢?大概还是冷清的原因。
根据题意,这题首先要解决十六进制转十进制显示的问题。其次再是显示过滤后的数据。显示需要的数据真不需要排序,有两个方法解决:
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
能编个毛线衣吗?