ORG 100H DA3 DW DA4
DA4 DB 4 DUP(2 DUP(1,2,3),4)
MOV AL£¬ARRAY+2 £¨AL£©=£¨ £©H ADD AL£¬DA2+1 £¨AL£©=£¨ £©H MOV AX£¬DA2-DA1 £¨AX£©=£¨ £©H MOV BL£¬LEN £¨BL£©=£¨ £©H MOV AX, DA3 £¨AX£©=£¨ £©H MOV BX, TYPE DA4 £¨BX£©=£¨ £©H MOV BX, OFFSET DA4 £¨BX£©=£¨ £©H MOV CX, SIZE DA4 £¨CX£©=£¨ £©H MOV DX, LENGTH DA4 £¨DX£©=£¨ £©H MOV BX, WORD PTR DA4 £¨BX£©=£¨ £©H MOV BL, LEN AND 0FH £¨BL£©=£¨ £©H MOV BL, LEN GT 5 £¨BL£©=£¨ £©H MOV AX, LEN MOD 5 £¨AX£©=£¨ £©H
4.3 ±äÁ¿ºÍ±êºÅÓÐÄÄÐ©Çø±ð£¿±äÁ¿ºÍ±êºÅÓÐÄÄЩÊôÐÔ£¿ÈçºÎ»ñÈ¡ÊôÐÔÖµ£¿Ð´
³öÖ¸Áî¡£
±äÁ¿ÊÇΪָÁîÌṩµÄ²Ù×÷Êý£¬±êºÅÊÇΪָÁîÌṩ±êʶ£¬¶¼ÊÇΪÁËÔÚÖ¸ÁîÖÐÒýÓá£ËüÃÇ×îÖ÷ÒªµÄÊôÐÔÓУºÆ«ÒÆÊôÐÔ£¬¶ÎÊôÐÔ£¬ÀàÐÍÊôÐÔ¡£ÀýÈ磺 MOV BX£¬ OFFSET VAL £»È¡Æ«ÒÆÊôÐÔ MOV BX£¬ SEG VAL £»È¡¶ÎÊôÐÔ MOV BX£¬ TYPE VAL £»È¡ÀàÐÍÊôÐÔ
4.4 Ö¸ÁîºÍαָÁîµÄÇø±ðÔÚÄÄÀαָÁî¿ÉÒÔ³öÏÖÔÚ´úÂë¶ÎÂð£¿Ö¸Áî¿ÉÒÔÔÚÊý¾Ý¶ÎÂð£¿
Ö¸ÁîÖ»ÄܳöÏÖÔÚ´úÂë¶Î£¬¶¨ÒåÊý¾ÝµÄαָÁîͨ³£ÔÚÊý¾Ý¶Î¡£Î±Ö¸Áî²»»áÉú³ÉÖ¸Áî¡£
4.5 ÏÂÃæµÄ³ÌÐòÊÇ·ñÓÐ´í£¿ÄÜ·ñͨ¹ý»ã±à£¿³ÌÐòÔËÐеĽá¹ûÈçºÎ£¿³ÌÐòµÄÕæÕýÒâͼÊÇʲô£¿Ó¦ÈçºÎÐ޸ijÌÐò²ÅÄÜʵÏÖÕæÕýÒâͼ£¿
´ð£ºÍ¨¹ý»ã±àºÍÁ¬½Ó¿ÉÒÔÔËÐУ¬µ«³ÌÐòÕæÕýÒâͼÊÇÊä³öASCIIÂëΪ30H~39HµÄ×Ö·û0~9£¬Ó¦×÷Ð޸ġ£
CODE SEGMENT
ASSUME CS:CODE
K=30H £»¸ÄΪ K DB 30H J DW 0 START: MOV DL, K MOV AH, 2 INT 21H
K=K+1 £»K=K+1ÊÇαָÁûÉú³É´úÂ룬¸ÄΪ INC K INC J
CMP J, 10 JNZ START
MOV AH, 4CH INT 21H CODE ENDS
END START
4.6 ÓÃ32λָÁî±àдÍêÕû³ÌÐò£¬²¢ÉÏ»úµ÷ÊÔ£¬¼ÆËãV=(X+Y)*R£¬ÆäÖÐËùÓбä
Á¿¾ùΪ64λ±äÁ¿£¬X¡¢Y¡¢RµÄ¾ßÌåÊýÖµÓÉÄã×Ô¼ºÈ·¶¨£¬±äÁ¿¶¨Òå¸ñʽÈçÏ£º
X DD ?,? Y DD ?,? R DD ?,? V DD ?,? data segment x dd 1 y dd 2 r dd 3 v dd ?,? data ends
code segment
assume cs:code,ds:data .386p start:
mov ax,data mov ds,ax mov eax,x add eax,y mov ebx,r imul ebx mov v,eax mov v+4,edx mov dl,al add dl,30h mov ah,2 int 21h mov ah,4ch int 21h code ends end start
ϰÌâ5
5.1 ÏÂÁгÌÐòÊÇÔÚ3¸öÊýÖÐÕÒ³ö×îСµÄÊý²¢·ÅÈëAL£¬ÔÚÀ¨ºÅÖÐÌîÈëÖ¸ÁîʹÆäÍêÕû¡£
mov al£¬x mov bl£¬y mov cl£¬z
cmp al£¬bl
( jl l1 )
xchg al£¬bl l1: cmp al, cl
jle l2
( xchg al,cl ) l2: ret
5.2 Êý¾Ý¶ÎÈçÏ£º
data segment
da1 db 1£¬2£¬¡®abcd¡¯ count = $-da1
da2 db 9 dup(?)
data ends
²¹³äÀ¨ºÅ´¦µÄÖ¸ÁʹµÃ³ÌÐò°ÑDA1Êý¾ÝÇøÊý¾ÝÒÆµ½DA2Êý¾ÝÇø¡£
mov ax£¬data
mov ds, ax
mov es£¬( AX ) mov cx£¬( COUNT )
mov si, ( OFFSET DA1 ) ( MOV DI, OFFSET DA2 ) ( REP MOVSB )
5.3 ÒÔϳÌÐò¶ÔÎÞ·ûºÅÊý×éARRAYµÄ6¸öÔªËØ´ÓСµ½´óÅÅÐò£¬²¹³äÀ¨ºÅ´¦µÄÖ¸Áî¡£
data segment
array dw 4£¬3£¬12£¬56£¬5£¬8 data ends code segment
assume cs:code,ds:data start: ( mov ax,data ) ( mov ds, data ) mov cx, 5 l1: mov di, cx mov bx, 0
l2: mov ax, array[bx] cmp ax, array[bx+2]
( jl l3 )
xchg ax, array[bx+2] mov array[bx], ax
l3: add bx, 2
( loop l2 )
mov cx, di loop l1
mov ah, 4ch int 21h
code segment
end start
5.4 ±àд³ÌÐò£¬ÊµÏÖ´Ó¼üÅÌÊäÈëµÄСд×ÖĸÓôóд×ÖĸÏÔʾ³öÀ´¡£¶ÔÊäÈëÐëºÏ·¨ÐÔ¼ì²é¡£
code segment
assume cs:code start: push ds sub ax,ax push ax mov ah,1 int 21h cmp al,61h jb exit cmp al,7ah ja exit
sub al,20h mov dl,al mov ah,2 int 21h
exit:ret code ends
end start
5.5 ±àд³ÌÐò£¬±È½ÏÁ½¸ö×Ö·û´®ÊÇ·ñÏàͬ£¬Èç¹ûÏàͬ£¬ÔòÏÔʾÁ½¸ö×Ö·û´®£¬Èç¹û
²»Í¬£¬ÔòÏÔʾ·¢ÏÖ²»Í¬µÄ×Ö·ûλÖᣠdatasg segment
mess1 db 13,10, 'input string1:$' mess2 db 13,10, 'input string2:$' mess3 db 13,10, 'match!$'
mess4 db 13,10, 'no match at $'
st1 label byte max1 db 6 act1 db ?
stok1 db 6 dup(?)
st2 label byte max2 db 6 act2 db ?
Ïà¹ØÍÆ¼ö£º