΢»úÔ­ÀíÓë½Ó¿Ú¼¼Êõ(Ç®Ïþ½Ý1°æ)¿ÎºóϰÌâ´ð°¸ ÏÂÔØ±¾ÎÄ

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