»ã±àÓïÑÔ³ÌÐòÉè¼Æ£¨ºÏ¹¤´ó°æ£©Ï°Ìâ²Î¿¼´ð°¸ ÏÂÔØ±¾ÎÄ

5.13 ×ÖÊý×éARRAY£¬µÚÒ»¸öµ¥ÔªÎªÔªËظöÊýN£¬ºóÃæÎªN¸öÔªËØ£¬±àд³ÌÐò£¬°ÑÁãÔªËØ´ÓÊý×éÖÐÇå³ý£¬Òƶ¯ÔªËØÎ»Öò¢Ð޸ĵÚÒ»¸öµ¥Ôª(ÔªËØ¸öÊý)¡£ ;delete the 0 from array data segment

array dw 6,3,4,0,15,0,7

loca dw 999 £»´Ëµ¥ÔªµØÖ·Îª½áÊø±ê¼Ç data ends code segment

assume cs:code,ds:data start:

mov ax, data mov ds, ax mov cx, array lea bx, array+1 next: cmp word ptr[bx],0 jz move add bx,2 dec cx cmp cx,0 jnz next jmp exit move: dec array mov di,bx mnext:

cmp di,offset loca ja next

mov ax, [di+2] mov [di],ax add di,2

cmp di,offset loca jnb next jmp mnext exit: mov ah,4ch int 21h code ends end start

5.14 ϱíΪ°ÂÔË»á»ñ½ðÅÆÇ°Ê®Ãû¹ú¼ÒµÄ³É¼¨Í³¼Æ±í£¬Çë±àд³ÌÐò£¬Í³¼Æ²¢Ìîд±íÖеĺϼÆÀ¸Êý¾Ý¡£

£» ÏÈÖðÐÐÇóС¼Æ£¬ÔÙ°´ÁÐÇóºÏ¼Æ¡£ data segment

array db 1,0,1,? £»Éè¼òµ¥Êý¾Ý db 1,1,0,? db 1,1,0,? db 1,1,1,? db 1,1,1,? db 1,1,1,? db 1,1,1,? db 1,1,1,? db 1,1,1,? db 1,1,1,? org 30h

sumvd db ?,?,?,? £»´æ·Å°´ÁÐÇóµÄºÏ¼ÆÊý org 40h

loca dw ? £»´æ·ÅarrayµÄµÚÒ»ÐеØÖ· data ends code segment

assume cs:code,ds:data start:

mov ax, data mov ds, ax mov ax, 0 mov cx, 10 lea bx, array

sumh: mov di, 3 sum3: add al, [bx] inc bx dec di jnz sum3

mov [bx],al ; ´æ·ÅÐеÄС¼Æ mov ax,0 inc bx loop sumh

; ÏÂÃæ°´ÁÐÇóºÏ¼Æ

lea bx, array mov loca,bx lea si, sumvd mov cx,10 mov di,4 sumv3:

mov ax,0 mov bx,loca sumv: add al, [bx] add bx,4 loop sumv mov [si],al mov cx,10 inc si inc loca dec di jnz sumv3 exit: mov ah,4ch int 21h code ends end start

6.1 ¹ý³Ì¶¨ÒåÈçÏ£¬²¹³äÀ¨ºÅÖеÄÖ¸Áî¡£

code segment

assume cs:code main proc far

( PUSH DS ) ( XOR AX,AX ) ( PUSH AX ) ¡­ ¡­ ¡­ ret

main endp code ends end main

6.2 ²¹³äÏÂÁгÌÐòÀ¨ºÅÖеÄÖ¸ÁʹµÃ³ÌÐò¶Ô¶ÑÕ»µÄ²Ù×÷È«²¿ÀûÓóÌÐòÖж¨ÒåµÄTOS¶ÑÕ»£¬²¢»­³ö³ÌÐòÖ´Ðкó¶ÑÕ»TOSÖеÄÊý¾Ý¡£

data segment

dw 100 dup(?) tos label word data ends code segment

assume cs:code,ss:data main proc far

( MOV AX,DATA ) ( MOV SS,AX ) ( LEA SP,TOS ) push ds

xor ax£¬ ax push ax

call far ptr suba

¡­ £»¼Ù¶¨´Ë´¦Ö¸ÁîµÄµØÖ·Îªcs=3400h£¬ip=30h ¡­ ¡­

code ends

end main

6.3 ÒÔÏÂÁ½¸ö¶ÀÁ¢³ÌÐòÄ£¿é£¬»¥ÏàÓõ½¶Ô·½µÄ±äÁ¿ºÍ±êºÅ£¬ÄãÈÏΪÄÄÒ»¸öÊÇÖ÷Ä£

¿é£¿³ÌÐòÓÐûÓдíÎó£¿Ó¦¸ÃÈçºÎÐ޸ģ¿

´ð£ºm1.asmÊÇÖ÷Ä£¿é£¬ÒòΪËüÓÐcall m2£¬µ«Ã»ÓÐ˵Ã÷Íⲿ·ûºÅ£¬¶øm2±ØÐëÊÇ

¹ý³ÌÃû£¬var4£¬lab2ҲûÓÐ˵Ã÷Íⲿ·ûºÅ¡£var1 £¬var2ûÓÐ˵Ã÷ΪPUBLIC¡£Ó¦¼ÓÉÏ£º

EXTRN m2:FAR,var4:WORD PUBLIC var1, var2,lab1

²¢ÐÞ¸Ädata segmentΪdata segment PUBLIC ͬÀíM2.asmÓ¦¼ÓÉÏ£º

EXTRN var1:byte,var2:word extrn lab1:FAR PUBLIC t603b, var4

²¢ÐÞ¸Ädata segmentΪdata segment PUBLIC

ÒÔÉÏÍê³ÉÖ÷ÒªÐ޸쬵«³ÌÐòÒÀÈ»ÓÐ´í£¬Çë×Ðϸ¼ì²é²Ù×÷ÊýÀàÐÍÊÇ·ñÆ¥Åä¡£

£»m1.asm ÈçÏÂ: data segment var1 db ? var2 dw ? var3 dw ?

data ends code1 segment

assume cs:code1,ds:data

main proc far start: ¡­