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: ¡