Æ«ÒÆµØÖ·£º±íʾ±êºÅËùÔÚ´úÂë¶ÎµÄ¶ÎÄÚÆ«ÒƵØÖ·£»
ÀàÐÍ£ºÒýÓøñêºÅʱ£¬±íʾËüËùÔÚͬһ¸ö¶ÎnearÀàÐÍ£¬»¹ÊÇÁíÍâÒ»¸ö¶ÎfarÀàÐÍ¡£ 3.19; ÉèÔÚij¸ö³ÌÐòÖÐÓÐÈçÏÂÆ¬¶Î£¬Çëд³öÿÌõ´«ËÍÖ¸ÁîÖ´Ðкó¼Ä´æÆ÷AXµÄÄÚÈÝ£º mydata segment ORG lO0h VARW DW l234H£¬5678H VARB DB 3,4
AGLIN 4 VARD DD 12345678H EVEN BUFF DB 10 DUP(?) MESS DB ¡¯HELLO¡¯
MOV AX, OFFSET VARB + OFFSET MESS £»AX = 4+16H = 1AH MOV AX, TYFE TYPE BUFF+TYPE MESS+TYPE VARD£»AX = 1+1+4 = 06H MOV AX£¬SIZE VARW+SIZE BUFF+SIZE MESS£»AX = 4+10+5 = 19 = 13H MOV AX,LENGTH VARW + LENGTH VARD £»AX = 2+1 = 03H MOV AX,LENGTH BUFF + SIZE VARW £»AX = 10+4 =14 = 0EH MOV AX,TYPE BIGIN £»AX = FF02H (½ü£©
MOV AX,OFFSET BEGIN £»AX = 1BH 3.20¡¢ÀûÓüò»¯¶Î¶¨Òå¸ñʽ£¬±ØÐë¾ßÓÐ.MODELÓï¾ä¡£MASM¶¨ÒåÁËÄÄ7Öִ洢ģʽ£¬TINYºÍSMALLģʽ´´½¨Ê²Ã´ÀàÐÍ£¨EXE»òCOM£©³ÌÐò£¿Éè¼Æ32λ³ÌÐòÓ¦¸Ã²ÉÓÃʲôģʽ£¿
3.21¡¢Ô´³ÌÐòÖÐÈçºÎÖ¸Ã÷Ö´ÐÐµÄÆðʼµã£¿Ô´³ÌÐòÓ¦¸Ã²ÉÓÃÄĸöDOS¹¦Äܵ÷Óã¬ÊµÏÖ³ÌÐò·µ»ØDOS£¿
3.22; ÔÚSMALL´æ´¢Ä£Ê½Ï£¬¼ò»¯¶Î¶¨Òå¸ñʽµÄ´úÂë¶Î¡¢Êý¾Ý¶ÎºÍ¶ÑÕ»¶ÎµÄȱʡ¶ÎÃû¡¢¶¨Î»¡¢×éºÏÒÔ¼°Àà±ðÊôÐÔ·Ö±ðÊÇʲô£¿ ¶Î¶¨ÒåαָÁî ¶ÎÃû ¶¨Î» ×éºÏ Àà±ð ×éÃû .CODE _TEXT WORD PUBLIC ¡¯CODE¡¯
.DATA _DATA WORD PUBLIC ¡¯DATA¡¯ DGROUP .STACK STACK PARA STACK ¡¯STACK¡¯ DGROUP
3.23¡¢ÈçºÎÓÃÖ¸Áî´úÂë´úÌæ.startupºÍ.exitÖ¸ÁʹµÃÀýÌâ3.1aÄܹ»ÔÚMASM 5.xÏ»ã±àͨ¹ý£¿
3.24¡¢´´½¨Ò»¸öCOM³ÌÐòÍê³ÉÀýÌâ3.1µÄ¹¦ÄÜ¡£
3.25; °´ÏÂÃæÒªÇóдһ¸ö¼ò»¯¶Î¶¨Òå¸ñʽµÄÔ´³ÌÐò
£¨1£© ¶¨Òå³£Á¿num£¬ÆäֵΪ5£»Êý¾Ý¶ÎÖж¨Òå×ÖÊý×é±äÁ¿datalist£¬ËüµÄÍ·5¸ö×Öµ¥ÔªÖÐÒÀ´Î´æ·Å-1¡¢0¡¢2¡¢5ºÍ4£¬×îºó1¸öµ¥Ôª³õÖµ²»¶¨£»
£¨2£© ´úÂë¶ÎÖеijÌÐò½«datalistÖÐÍ·num¸öÊýµÄÀۼӺʹæÈëdatalistµÄ×îºó1¸ö×Öµ¥ÔªÖС£
.model small .stack .data num equ 5
datalist dw -1,0,2,5,4,? .code .startup
mov bx,offset datalist mov cx,num xor ax,ax again: add ax,[bx] inc bx inc bx loop again mov [bx],ax .exit 0 end
3.26; °´ÏÂÃæÒªÇóдһ¸öÍêÕû¶Î¶¨Òå¸ñʽµÄÔ´³ÌÐò
£¨1£© Êý¾Ý¶Î´ÓË«×ֱ߽翪ʼ£¬ÆäÖж¨ÒåÒ»¸ö100×Ö½ÚµÄÊý×飬ͬʱ¸Ã¶Î»¹×÷Ϊ¸½¼Ó¶Î£»
£¨2£© ¶ÑÕ»¶Î´Ó½Ú±ß½ç¿ªÊ¼£¬×éºÏÀàÐÍΪstack£»
£¨3£© ´úÂë¶ÎµÄÀà±ðÊÇ¡¯code¡¯£¬Ö¸¶¨¶Î¼Ä´æÆ÷¶ÔÓ¦µÄÂß¼¶Î£»Ö÷³ÌÐòÖ¸¶¨´Ó100h¿ªÊ¼£¬¸øÓйضμĴæÆ÷¸³³õÖµ£»½«Êý×éÔªËØÈ«²¿ÉèÖÃΪ64h¡£ stack segment para ¡®stack¡¯
dw 512 dup(?) stack ends data segment
dword array db 100 dup(?) data ends
code segment ¡®code¡¯
assume cs:code,ds:data,es:data,ss:stack org 100h
start: mov ax,data mov ds,ax
mov es,ax mov di,offset array mov al,64h mov cx,100 cld rep stosb mov ax,4c00h int 21h code ends end start
3.27; ±àÖÆ³ÌÐòÍê³ÉÁ½¸öÒÑ֪˫¾«¶ÈÊý£¨4×Ö½Ú£©AºÍBÏà¼Ó²¢½«½á¹û´æÈëË«¾«¶È±äÁ¿µ¥ÔªSUMÖУ¨²»¿¼ÂÇÒç³ö£©¡£ ½â´ð
£»xt327.asm .model small
.stack 256 £»¶¨Òå¶ÑÕ»¶Î´óСΪ256¸ö×Ö½Ú .data
anum dd 11223344h £»¶¨ÒåÁ½¸öË«×ÖµÄÊý£¨ËæÒ⣩ bnum dd 77553311h
sum dd ? £»¶¨Òå½á¹û£¬Ö´ÐкóΪ£º88776655h .code .startup
xor si, si £»Ïà¶ÔÓÚ±äÁ¿µÄÎ»ÒÆÁ¿ÇåÁã mov cx, 2 £»·Ö¸ßµÍ×Ö·Ö±ðÏà¼Ó£¬¹²Á½´Î clc £»ÇåÁãcf
again:mov ax, anum[si] £»È¡µÚÒ»¸öÊýµÄÒ»¸ö×Ö£¨ÏȵÍ×Öºó¸ß×Ö£©
adc ax, bnum[si] £»È¡µÚ¶þ¸öÊýµÄÒ»¸ö×Ö£¨ÏȵÍ×Öºó¸ß×Ö£© mov sum[si], ax £»´æºÍµÄÒ»¸ö×Ö£¨ÏȵÍ×Öºó¸ß×Ö£© inc si £»ÐÞ¸ÄÎ»ÒÆÁ¿Ö¸ÏòÏÂÒ»¸ö×Ö£¨¼Ó2£© inc si
loop again £»cx=cx-1 ,if cx<>0 ,jump again .exit 0 end
3.28 ±àÖÆ³ÌÐòÍê³É12H¡¢45H¡¢0F3H¡¢6AH¡¢20H¡¢0FEH¡¢90H¡¢0C8H¡¢57HºÍ34HµÈ10¸ö×Ö½ÚÊý¾ÝÖ®ºÍ£¬²¢½«½á¹û´æÈë×Ö½Ú±äÁ¿SUMÖУ¨²»¿¼ÂÇÒç³ö£©¡£ .startup
xor si, si £»Î»ÒÆÁ¿ÇåÁã mov al, bdata[si] £»È¡µÚÒ»¸öÊý mov cx, num-1 £»ÀÛ¼Ó´ÎÊý
again: inc si £»Ö¸ÏòÏÂÒ»¸öÊý adc al, bdata[si] £»ÀÛ¼Ó
loop again £»ÈçδÍ꣬¼ÌÐøÀÛ¼Ó mov sum, al £»ÍêÁË£¬´æ½á¹û .exit 0 end
3.29¡¢½á¹¹Êý¾ÝÀàÐÍÈçºÎ˵Ã÷¡¢½á¹¹±äÁ¿ÈçºÎ¶¨Òå¡¢½á¹¹×Ö¶ÎÈçºÎÒýÓã¿
3.30¡¢¼Ç¼Êý¾ÝÀàÐÍÈçºÎ˵Ã÷£¬¼Ç¼±äÁ¿ÈçºÎ¶¨Ò壬widthºÍmask²Ù×÷·ûÊÇʲô×÷Óã¿
µÚËÄÕ »ù±¾»ã±àÓïÑÔ³ÌÐòÉè¼Æ
4.1¡¢ÀýÌâ4.2Èç¹ûÒªÇóËãÊõÓÒÒÆ8룬ÈçºÎÐ޸ijÌÐò¡£
4.2¡¢ÀýÌâ4.2Èç¹ûÒªÇóËãÊõ×óÒÆ7룬ÈçºÎÓÃÒÆÎ»Ö¸ÁîʵÏÖ¡£
4.3; ˼·£ºÉèÕâËÄ×é´ÓµÍλµ½¸ßλ·Ö±ð·ÅÔÚAL¡¢BL¡¢CLºÍDL¼Ä´æÆ÷ÖС£ÕâÀï½öÁгö´úÂë¶Î£º
mov bl, al £»½«alÖеÄÁ½×é·Ö¿ª and al, 0fh £»ÆÁ±Î¸ßËÄλºóËÍal
mov cl, 4 £»ÔalÖеÄÊý¾ÝÂß¼ÓÒÒÆ4´ÎËÍbl shr bl, cl
mov dl, ah £»½«ahÖеÄÁ½×é·Ö¿ª and dl, 0f0h £»ÆÁ±ÎµÍ¸ßËÄλºóËÍdl
mov cl, 4 £»ÔahÖеÄÊý¾ÝÂß¼ÓÒÒÆ4´ÎËÍdl shr dl, cl
mov cl, ah £»ÆÁ±Î¸ßËÄλºóËÍcl and cl, 0fh
4.4; getkey: mov ah, 1 £»´Ó¼üÅÌÊäÈ룬³ö¿Ú:al´æ¼üÖµ int 21h
cmp al, ¡¯a¡¯ £»ÅмüÖµÊÇСд×Öĸ£¿ jb getkay cmp al, ¡¯z¡¯ ja getkay
sub al,20h £»ÊÇСд×Öĸת»»Îª´óд×Öĸ mov ah, 09h £»ÏÔʾ int 21h
4.8; £¨1£© ½«jmp table[bx]Ö¸Áî¸ÄΪ£ºmov dx, table[bx] £¨2£© È¥µôÔ´³ÌÐòÖУº.exit 0---endÖ®¼äµÄÓï¾ä 4.17; .model small .stack 256 .data
stri1 db ¡¯please input number:1--9¡¯,odh,oah,¡¯$¡¯ .code .startup
again: mov dx,offset stri1 £»ÏÔʾstri1£¬ÌáʾÊäÈë mov ah,09h int 21h
mov ah,01h £»µ÷ÓÃÊäÈëÒ»¸ö×Ö·û int 21h £»ÊäÈëÒ»¸ö×Ö·û´æÔÚalÖÐ cmp al, ¡¯1¡¯ £»ÅиÃ×Ö·û£¬Èç²»ÔÚ¡®1¡¯--¡®9¡¯ jb again £»ÖØÐÂÊäÈë cmp al, ¡¯9¡¯ ja again
Ïà¹ØÍÆ¼ö£º