; ´úÂë¶Î£¬×Ó³ÌÐò dispbd proc ; 32λ¶þ½øÖÆÊýµÄÊä³ö push ecx push edx mov ecx,32 ; ÒªÊä³öµÄ×Ö·û¸öÊý dbd: rol eax,1; ALÑ»·×óÒÆÒ»Î» push eax and al,01h ; È¡AL×îµÍλ add al,30h ; ת»¯³ÉÏàÓ¦µÄASCLLÂëÖµ call dispc ; ÒÔ¶þ½øÖƵÄÐÎʽÏÔʾ pop eax loop dbd pop edx pop ecx ret
dispbd 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 jz write5
mov byte ptr [ebx],dl inc ebx jmp write4
write5: ;ÏÔʾ½á¹û mov byte ptr [ebx],0 mov eax,offset writebuf call dispmsg pop edx pop ecx pop ebx ret write endp ¡²Ï°Ìâ4.24¡³
²Î¿¼ÀýÌâ4-17£¬±àдʵÏÖ32λÎÞ·ûºÅÕûÊýÊäÈëµÄ×Ó³ÌÐò£¬²¢Éè¼ÆÒ»¸öÖ÷³ÌÐòÑéÖ¤¡£ ¡²½â´ð¡³ ; Êý¾Ý¶Î count =10
array dword count dup(0) temp dword ?
readbuf byte 30 dup(0)
errmsg byte 'Input error,enter again!',13,10,0
msg1 byte 'Input ten unsigned numbers,each number ends with enter key:',13,10,0 msg2 byte 'Check the numbers your inputted:',13,10,0 ; ´úÂë¶Î£¬Ö÷³ÌÐò
mov eax,offset msg1 call dispmsg mov ecx,count
mov ebx,offset array again:
call read
mov eax,temp mov [ebx],eax
add ebx,4 dec ecx jnz again
mov eax,offset msg2 call dispmsg
mov edx,offset array mov ecx,count next:
mov eax,[edx] call dispuid call dispcrlf add edx,4 dec ecx jnz next ; ´úÂë¶Î£¬×Ó³ÌÐò read proc
push eax push ecx push ebx push edx read0:
mov eax,offset readbuf call readmsg test eax,eax jz readerr cmp eax,12 ja readerr
mov edx,offset readbuf xor ebx,ebx xor ecx,ecx mov al,[edx] cmp al,'+' jz read1 cmp al,'-' jnz read2 jmp readerr read1:
inc edx
mov al,[edx] test al,al
jz read3 ;Èç¹ûΪ0£¬Ôò˵Ã÷¸Ã×Ö·û´®ÒѽáÊø read2:
cmp al,'0' jb readerr cmp al,'9' ja readerr sub al,30h
imul ebx,10 ;ebxÓÃÀ´´æ´¢´¦Àí¹ýµÄÊý¾Ý jc readerr movzx eax,al add ebx,eax jnc read1 readerr:
mov eax,offset errmsg call dispmsg jmp read0 read3:
mov temp,ebx pop edx pop ebx pop ecx pop eax ret read endp ¡²Ï°Ìâ4.25¡³
±àдһ¸ö¼ÆËã×Ö½ÚУÑéºÍµÄ×Ó³ÌÐò¡£Ëùν¡°Ð£ÑéºÍ¡±ÊÇÖ¸²»¼Ç½øÎ»µÄÀÛ¼Ó£¬³£ÓÃÓÚ¼ì²éÐÅÏ¢µÄÕýÈ·ÐÔ¡£Ö÷³ÌÐòÌṩÈë¿Ú²ÎÊý£¬ÓÐÊý¾Ý¸öÊýºÍÊý¾Ý»º³åÇøµÄÊ×µØÖ·¡£×Ó³ÌÐò»ØËÍÇóºÍ½á¹ûÕâ¸ö³ö¿Ú²ÎÊý¡£ ¡²½â´ð¡³ ; ¼ÆËã×Ö½ÚУÑéºÍµÄͨÓùý³Ì ; Èë¿Ú²ÎÊý£ºDS:EBX£½Êý×éµÄ¶ÎµØÖ·:Æ«ÒÆµØÖ·£¬ECX=ÔªËØ¸öÊý ; ³ö¿Ú²ÎÊý£ºAL£½Ð£ÑéºÍ ; ˵Ã÷£º³ýEAX/EBX/ECXÍ⣬²»Ó°ÏìÆäËû¼Ä´æÆ÷ checksum proc xor al,al ; ÀÛ¼ÓÆ÷Çå0 sum: add al,[ebx] ; ÇóºÍ inc ebx ; Ö¸ÏòÏÂÒ»¸ö×Ö½Ú loop sum ret
checksum endp ¡²Ï°Ìâ4.26¡³
±àÖÆ3¸ö×Ó³ÌÐò°ÑÒ»¸ö32λ¶þ½øÖÆÊýÓÃ8λʮÁù½øÖÆÐÎʽÔÚÆÁÄ»ÉÏÏÔʾ³öÀ´£¬·Ö±ðÔËÓÃÈçÏÂ3ÖÖ²ÎÊý´«µÝ·½·¨£¬²¢ÅäºÏ3¸öÖ÷³ÌÐòÑéÖ¤Ëü¡£ £¨1£©²ÉÓÃEAX¼Ä´æÆ÷´«µÝÕâ¸ö32λ¶þ½øÖÆÊý £¨2£©²ÉÓÃtemp±äÁ¿´«µÝÕâ¸ö32λ¶þ½øÖÆÊý £¨3£©²ÉÓöÑÕ»·½·¨´«µÝÕâ¸ö32λ¶þ½øÖÆÊý ¡²½â´ð¡³ £¨1£© ; Êý¾Ý¶Î
wvar word 307281AFH ; ´úÂë¶Î£¬Ö÷³ÌÐò mov eax,wvar call disp mov al,'H' call dispc ; ´úÂë¶Î£¬×Ó³ÌÐò