您的位置:首页 > 其它

第六章实验任务(6)

2009-08-24 09:38 330 查看
题目:编写程序,用push指令将a段中的前8个字型数据逆序存储到b段中。

解答:

源代码:

assume cs:codesg
a segment
  dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends

b segment
  dw 0,0,0,0,0,0,0,0
b ends

codesg segment
start:
    mov ax,a
    mov ds,ax

    mov ax,b
    mov ss,ax
    mov sp,10h

    mov bx,0eh
    mov cx,8

 s: push ds:[bx]
    sub bx,2
    loop s

    mov ax,4c00h
    int 21h

codesg ends
end start


调试过程:

-r

AX=0000  BX=0000  CX=004F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B88  IP=0000   NV UP EI PL NZ NA PO NC 
0B88:0000 B8850B        MOV	AX,0B85                            
-u

0B88:0000 B8850B        MOV	AX,0B85                            
0B88:0003 8ED8          MOV	DS,AX                              
0B88:0005 B8870B        MOV	AX,0B87                            
0B88:0008 8ED0          MOV	SS,AX                              
0B88:000A BC1000        MOV	SP,0010                            
0B88:000D BB0E00        MOV	BX,000E                            
0B88:0010 B90800        MOV	CX,0008                            
0B88:0013 FF37          PUSH	[BX]                               
0B88:0015 83EB02        SUB	BX,+02                             
0B88:0018 E2F9          LOOP	0013                               
0B88:001A B8004C        MOV	AX,4C00                            
0B88:001D CD21          INT	21                                 
0B88:001F C20183        RET	8301                               
-t

AX=0B85  BX=0000  CX=004F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B88  IP=0003   NV UP EI PL NZ NA PO NC 
0B88:0003 8ED8          MOV	DS,AX                              
-t

AX=0B85  BX=0000  CX=004F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B85  CS=0B88  IP=0005   NV UP EI PL NZ NA PO NC 
0B88:0005 B8870B        MOV	AX,0B87                            
-t

AX=0B87  BX=0000  CX=004F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B85  CS=0B88  IP=0008   NV UP EI PL NZ NA PO NC 
0B88:0008 8ED0          MOV	SS,AX                              
-t

AX=0B87  BX=0000  CX=004F  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B87  CS=0B88  IP=000D   NV UP EI PL NZ NA PO NC 
0B88:000D BB0E00        MOV	BX,000E                            
-t

AX=0B87  BX=000E  CX=004F  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B87  CS=0B88  IP=0010   NV UP EI PL NZ NA PO NC 
0B88:0010 B90800        MOV	CX,0008                            
-t

AX=0B87  BX=000E  CX=0008  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B87  CS=0B88  IP=0013   NV UP EI PL NZ NA PO NC 
0B88:0013 FF37          PUSH	[BX]                               DS:000E=0008
-d ds:0 f

0B85:0000  01 00 02 00 03 00 04 00-05 00 06 00 07 00 08 00   ................
-d ss:0 f

0B87:0000  00 00 00 00 00 00 87 0B-00 00 13 00 88 0B 77 05   ..............w.
-p

AX=0B87  BX=000E  CX=0008  DX=0000  SP=000E  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B87  CS=0B88  IP=0015   NV UP EI PL NZ NA PO NC 
0B88:0015 83EB02        SUB	BX,+02                             
-p

AX=0B87  BX=000C  CX=0008  DX=0000  SP=000E  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B87  CS=0B88  IP=0018   NV UP EI PL NZ NA PE NC 
0B88:0018 E2F9          LOOP	0013                               
-p

AX=0B87  BX=FFFE  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B87  CS=0B88  IP=001A   NV UP EI NG NZ AC PO CY 
0B88:001A B8004C        MOV	AX,4C00                            
-p

AX=4C00  BX=FFFE  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B87  CS=0B88  IP=001D   NV UP EI NG NZ AC PO CY 
0B88:001D CD21          INT	21                                 
-d ss:0 f

0B87:0000  01 00 02 00 03 00 04 00-05 00 06 00 07 00 08 00   ................
-p

Program terminated normally
-p


小结:这道题的关键是了解dw定义的是字型数据,所以在设置sp的值的时候,就是10h了。此外,这道题中的把b段当作堆栈段了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: