disp:
next: done: cmp eax,0 jz next mov ebx,1 add al,30h call dispc loop again
; EAX£½0£¬ËµÃ÷ÊÇǰµ¼0£¬²»ÏÔʾ
; EAX¡Ù0£¬Ã»ÓÐǰµ¼0ÁË£¬ÁîEBX£½1¡Ù0
¡²Ï°Ìâ4.17¡³
ÒÑÖªÒ»¸ö×Ö·û´®µÄ³¤¶È£¬ÌÞ³ýÆäÖÐËùÓеĿոñ×Ö·û¡£Çë´Ó×Ö·û´®×îºóÒ»¸ö×Ö·û¿ªÊ¼Öð¸öÏòǰÅжϡ¢²¢½øÐд¦Àí¡£ ¡²½â´ð¡³
string
outlp:
inlp:
next:
done:
; Êý¾Ý¶Î
byte 'Let us have a try !',0dh,0ah,0 ; ´úÂë¶Î
mov ecx,sizeof string cmp ecx,2 jb done
lea eax,string ; ÏÔʾ´¦ÀíǰµÄ×Ö·û´® call dispmsg mov esi,ecx dec esi
cmp string[esi],' ' ; ¼ì²âÊÇ·ñÊǿոñ jnz next ; ²»Êǿոñ¼ÌÐøÑ»· mov edi,esi ; Êǿոñ£¬½øÈëÌÞ³ý¿Õ¸ñ·ÖÖ§ dec ecx inc edi
mov al,string[edi] ; Ç°ÒÆÒ»¸öλÖà mov string[edi-1],al cmp edi,ecx jb inlp dec esi ; ¼ÌÐø½øÐÐ cmp esi,0 jnz outlp ; Ϊ0½áÊø lea eax,string ; ÏÔʾ´¦ÀíºóµÄ×Ö·û´® call dispmsg
¡²Ï°Ìâ4.18¡³
µÚ3ÕÂϰÌâ3.14ÔÚÆÁÄ»ÉÏÏÔʾASCII±í£¬ÏÖ½öÔÚÊý¾Ý¶ÎÉèÖñí¸ñ»º³åÇø£¬±à³Ì½«ASCII´úÂëÖµÌîÈëÁô³öλÖõıí¸ñ£¬È»ºóµ÷ÓÃÏÔʾ¹¦ÄÜʵÏÖ£¨ÐèÒªÀûÓÃË«ÖØÑ»·£©¡£ ¡²½â´ð¡³
table
tab1
include io32.inc .data
byte ' |0 1 2 3 4 5 6 7 8 9 A B C D E F',13,10 byte '---+-------------------------------',13,10 byte 6 dup(36 dup(?),13,10) byte 0 .code
£ £25
start:
again0:
again1:
mov ebx,offset tab1 mov edx,'| 02' mov ax,2020h mov esi,6
mov [ebx],edx add ebx,4 mov ecx,16
mov word ptr [ebx],ax add ebx,2 inc al
loop again1 add ebx,2 add edx,1 dec esi jnz again0
mov eax,offset table call dispmsg exit 0 end start
¡²Ï°Ìâ4.19¡³
Çë°´ÈçÏÂ˵Ã÷±àд×Ó³ÌÐò£º
×Ó³ÌÐò¹¦ÄÜ£º°ÑÓÃASCIIÂë±íʾµÄÁ½Î»Ê®½øÖÆÊýת»»ÎªÑ¹ËõBCDÂë Èë¿Ú²ÎÊý£ºDH£½Ê®Î»ÊýµÄASCIIÂ룬DL£½¸öλÊýµÄASCIIÂë ³ö¿Ú²ÎÊý£ºAL£½¶ÔÓ¦BCDÂë ¡²½â´ð¡³
asctob
asctob
proc
shl dh,4 mov al,dh and dl,0fh or al,dl ret endp
¡²Ï°Ìâ4.20¡³
³Ë·¨µÄ·ÇѹËõBCDÂëµ÷ÕûÖ¸ÁîAAMÖ´ÐеIJÙ×÷ÊÇ£ºAH¡ûAL¡Â10µÄÉÌ£¬AL¡ûAL¡Â10µÄÓàÊý¡£ÀûÓÃAAM¿ÉÒÔʵÏÖ½«ALÖеÄ100ÄÚÊý¾Ýת»»ÎªASCIIÂ룬³ÌÐòÈçÏ£º
xor ah,ah aam
add ax,3030h
ÀûÓÃÕâ¶Î³ÌÐò£¬±àдһ¸öÏÔʾALÖÐÊýÖµ£¨0¡«99£©µÄ×Ó³ÌÐò¡£ ¡²½â´ð¡³
disp99
proc
xor ah,ah aam
add ax,3030h
£ £26
disp99 push ax mov al,ah call dispc pop ax
call dispc ret endp
¡²Ï°Ìâ4.21¡³
±àдһ¸öÔ´³ÌÐò£¬ÔÚ¼üÅÌÉϰ´Ò»¸ö¼ü£¬½«Æä·µ»ØµÄASCIIÂëÖµÏÔʾ³öÀ´£¬Èç¹û°´ÏÂESC¼ü£¨¶ÔÓ¦ASCIIÂëÊÇ1BH£©Ôò³ÌÐòÍ˳ö¡£Çëµ÷ÓÃÊéÖеÄHTOASC×Ó³ÌÐò¡£ ¡²½â´ð¡³
again:
done:
; ´úÂë¶Î£¬Ö÷³ÌÐò call readc cmp al,1bh jz done mov bl,al mov al,':' call dispc mov al,bl rol al,4 call htoasc call dispc mov al,bl call htoasc call dispc call dispcrlf jmp again
; µ÷ÓÃ×Ó³ÌÐò ; ÏÔʾһ¸ö×Ö·û ; µ÷ÓÃ×Ó³ÌÐò ; ÏÔʾһ¸ö×Ö·û
¡²Ï°Ìâ4.22¡³
±àдһ¸ö×Ó³ÌÐò£¬ËüÒÔ¶þ½øÖÆÐÎʽÏÔʾEAXÖÐ32λÊý¾Ý£¬²¢Éè¼ÆÒ»¸öÖ÷³ÌÐòÑéÖ¤¡£ ¡²½â´ð¡³
dispbd
dbd:
; ´úÂë¶Î£¬Ö÷³ÌÐò mov eax,8F98FF00H call dispbd
; ´úÂë¶Î£¬×Ó³ÌÐò proc
push ecx push edx mov ecx,32 rol eax,1 push eax and al,01h add al,30h call dispc pop eax loop dbd pop edx pop ecx
; µ÷ÓÃ×Ó³ÌÐò
; 32λ¶þ½øÖÆÊýµÄÊä³ö
; ÒªÊä³öµÄ×Ö·û¸öÊý ; ALÑ»·×óÒÆÒ»Î» ; È¡AL×îµÍλ
; ת»¯³ÉÏàÓ¦µÄASCLLÂëÖµ ; ÒÔ¶þ½øÖƵÄÐÎʽÏÔʾ
£ £27
dispbd ret endp
¡²Ï°Ìâ4.23¡³
½«ÀýÌâ4-16µÄ32λ¼Ä´æÆ÷¸ÄÓÃ16λ¼Ä´æÆ÷£¬½öʵÏÖÊä³ö£215¡«£«215£1Ö®¼äµÄÊý¾Ý¡£ ¡²½â´ð¡³
; Êý¾Ý¶Î array word 12345,-1234,32767,-32768,0,667 writebuf byte 6 dup(0) ; ´úÂë¶Î£¬Ö÷³ÌÐò mov ecx,lengthof array mov ebx,0 again:
mov ax,array[ebx*2] call write call dispcrlf
inc ebx ;´Ëʱebx´ú±íarrayÖеĵڼ¸¸öÊý dec ecx ;´Ëʱecx´ú±íÑ»·µÄ´ÎÊý jnz again ; ´úÂë¶Î£¬×Ó³ÌÐò
write proc ;×Ó³ÌÐò¿ªÊ¼ push ebx push ecx push edx
mov ebx,offset writebuf ;ebxÖ¸ÏòÏÔʾ»º³åÇø test ax,ax jnz write1
mov byte ptr [ebx],30h inc ebx jmp write5
write1: ;Èô²»Îª0ÔòÊ×ÏÈÅжÏÊÇÕýÊǸº jns write2 ;ÈôΪÕýÔòÌø¹ýÏÂÃæÁ½²½µ½write2 mov byte ptr [ebx],'-' inc ebx neg ax write2:
mov cx,10
push cx ;½«cx=10ѹÈëÕ»£¬×÷ΪÍ˳ö±êÖ¾
write3: ;write3ÊÇÈÃeaxÑ»·³ýÒÔ10²¢°ÑÓàÊýµÄASCIIÂëѹÈëÕ» cmp ax,0 jz write4 xor dx,dx div cx
add dx,30h push dx jmp write3
write4: ;ÓàÊýµÄASCIIÂë³öÕ»£¬Óöµ½10ÖÕÖ¹²¢×ªµ½write5ÏÔʾ½á¹û pop dx cmp dx,cx
£ £28