΢»úÔ­Àí¼°½Ó¿Ú¼¼Êõ(ϰÌâ´ð°¸) ÏÂÔØ±¾ÎÄ

POP CX POP DX

Ö®ºó£¬SP=? SS=? CX=? DX=? ²¢»­Í¼Ö¸³ö¶ÑÕ»Öи÷µ¥ÔªµÄÄÚÈÝ¡£

½â´ð: SS=1000H

SP=1FFEH CX=2115H DX=5678H Õ»Öи÷µ¥ÔªÄÚÈÝÈçÏÂËùʾ:

µØÖ· RAM 11FFAH 2115 11FFCH 5678 11FFEH 1234 12000H

µÚ4Õ ºê»ã±àÓïÑÔ

ϰÌâÓë˼¿¼Ìâ

1.»­³öÒÔϱäÁ¿ÔÚÄÚ´æÖд洢µÄʾÒâͼ¡£ D1 DB ¡®A¡¯,¡¯123¡¯,09H, 45 D2 DW ¡®A¡¯,¡¯CD¡¯,23H, 4567H D3 DD 1234H, 23456789H

2.Éè¼Æ×Ó³ÌÐò·Ö±ðÍê³ÉÒÔϹ¦ÄÜ£º

1£©¸ù¾Ý¸ø¶¨µÄ²ÎÊýÖµ£¬ÅжϸòÎÊýÊÇżÊý»¹ÊÇÆæÊý¡£ 2£©°Ñ¸ø¶¨²ÎÊýÖµµÄ¸ß¡¢µÍÊý¾Ý뻥»»¡£

3.Éè¼ÆÏàÓ¦µÄºêÍê³ÉÒÔϹ¦ÄÜ£º 1£©°Ñ¸ø¶¨µÄ²ÎÊý°´¶þ½øÖÆÏÔʾ¡£

2£©ÇóÁ½¸ö²ÎÊýµÄºÍ£¬²¢°´Ê®½øÖÆÐÎʽÏÔʾ¡£ 6

·¶ÎÄ·¶Àý ѧϰָµ¼

µÚ5Õ »ã±àÓïÑÔ³ÌÐòÉè¼Æ

ϰÌâÓë˼¿¼Ìâ

1. ÉèÊý¾Ý¶ÎÖÐÓÐ×Ö½ÚÐ͵¥ÔªNUMBERºÍFLAG£¬ÅжÏNUMBERÓë¸ø¶¨µÄXºÍYµÄ´óС¹ØÏµ(XY£¬ÔòÖÃFLAG£½1£¬ÈôNUMBER

½â´ð£º.486 Data segment NUMBER db ? FLAG db ? Data ends Code segment

Assume cs: Code, ds: Data Beg: mov ax,data Mov ds,ax

mov al, X Mov bl, Y Cmp NUMBER, X Jnc P1

Mov FLAG, 0FFH Jmp exit

P1: cmp NUMBER, Y Ja P2

Mov FLAG, 00H Jmp exit

P2: mov FLAG, 01H Exit: mov ah, 4ch Int 21h Code ends End Beg

2. ¼ÆËã1£«2£«3£«¡­£«100£¬²¢°ÑºÍ±£´æÔÚSUMµ¥ÔªÖС£ .486

DATA SEGMENT USE16

TT DB 1 SUM DW ? DATA ENDS

CODE SEGMENT USE16

wordÍêÃÀÕûÀí°æ

ASSUME CS:CODE,DS:DATA BEG: MOV AX , DATA MOV DS, AX MOV CX, 100 MOV AX, 0 START: ADD AX, TT INC TT

LOOP START MOV SUM, AX MOV AH, 4CH MOV 21H

CODE ENDS

END BEG

3. ¶ÔÒ»¸ö¸ø¶¨µÄNÊý¾Ý£¬ÓÃðÅÝÅÅÐò·¨½øÐÐÅÅÐò¡£ ½â´ð£º.486

Data segment

Buf db ¡®abcd18437hj¡¯ Lens equ $-buf Count db lens Flag db ? Data ends Code segment

Assume cs: code, ds: data Beg: mov ax, data Mov ds, ax Again: dec count Jz done Mov flag, 0 Mov cx, count

Mov si, offset buf Last: mov al, [si] Mov ah, [si+1] Cmp ah, al Jnc next

Mov [si], ah Mv [si+1], al Mov flag, 1 Next: inc si 8

·¶ÎÄ·¶Àý ѧϰָµ¼

Loop last Cmp flag, 1 Je again

Done: mov buf+lens, ¡®$¡¯ Mov ah, 9

Mov dx, offset buf Int 21h Mov ah, 4ch Int 21h Code ends End Beg

4. ÓɼüÅÌÊäÈëÈÎÒâµÄÁ½¸öÊ®½øÖÆÊý£¬È»ºóת»»³É¶ÔÓ¦µÄѹËõBCDÂëµÄÐÎʽÔÚÆÁÄ»ÉÏÏÔʾ¡£

.486

DATA SEGMENT USE16 BCD DB ? BUF DB 3

DB ?

DB 3DUP(?)

MESG1 DB ¡®PLEASE INPUT :¡¯,0DH,OAH,¡¯$¡¯

MESG2 DB ¡®ERROR! NUMBER IS FROM 0 TO 9. PLEASE AGAIN!$¡¯ DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA BEG: MOV AX , DATA MOV DS, AX

L1: MOV DX, OFFSET MESG1

MOV AH, 9 ;ÏÔʾMESG1

INT 21H MOV AH, 0AH

MOV DX, OFFSET BUF

INT 21H £»ÊäÈë×Ö·û´® MOV AL£¬ BUF+2 CMP AL£¬ 30H JC ERROR CMP AL£¬ 3AH

JC NEXT £»ÅжϵÚÒ»¸öÊýÊäÈëÊÇ·ñ·ûºÏÒªÇó

ERROR£º MOV DX£¬ OFFSET MESG2

wordÍêÃÀÕûÀí°æ

MOV AH£¬ 9

INT 21H

JMP L1 £»ÊäÈë´íÎóÌáÊ¾ÖØÐÂÊäÈë NEXT£º SUB AL£¬ 30H

SAL AL£¬ 4 £»Çó³öʮλÊý×Ö MOV BCD£¬ AL MOV AL£¬ BUF+3 CMP AL£¬ 30H

JC ERROR

CMP AL£¬ 3AH

JNC ERROR £»Åжϵڶþ¸öÊýÊäÈëÊÇ·ñ·ûºÏÒªÇó

SUB AL£¬ 30H OR BCD£¬ AL MOV AH£¬ 4CH

INT 21H

CODE ENDS

END BEG

5. ÓɼüÅÌÊäÈëÁ½¸öÊ®Áù½øÖÆÊý£¬×ª»»³ÉµÈÖµµÄÊ®½øÖÆÊýºóÔÚÆÁÄ»ÉÏÏÔʾ¡£

CMPDISP MACRO NN ;ÓúêÓï¾äÍê³É±È½Ï·¨¶þ½øÖƵ½Ê®½øÖÆ×ª»» LOCAL LAST,NEXT

MOV DL, 0 LAST: CMP NUM, NN JC NEXT

INC DL

SUB NUM, NN JMP LAST

NEXT: ADD DL, 30H MOV AH, 2 INT 21H ENDM

DATA SEGMENT USE16

NUM DB ? BUF DB 3

DB ?

DB 3DUP(?)

DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA 10