题目:编写程序,用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段当作堆栈段了。