栈段数据段代码段
- 通过栈空间将 0123H,4567H,89ABH,0CDEFH 逆序排放
ASSUME CS:code
code SEGMENT
DW 0123H,1234H,2345H,3456H,4567H,5678H,6789H,789AH
DW 0,0,0,0,0,0,0,0 ; 模拟申请的栈空间
DW 0,0,0,0,0,0,0,0 ; 模拟申请的栈空间
start:
mov ax, cs
mov ss, ax ; 段地址
mov sp, 30H ; 栈顶
mov ax, cs
mov ds,ax ; 数据从哪里来
mov bx,0 ; 累加
mov cx,8 ; 循环8次
pushData:push ds:[bx] ; 放到栈中
add bx,2
loop pushData
mov bx,0 ; 还原
mov cx,8 ; 还原
popData: pop ds:[bx] ; 弹出顶层字放到 ds:[bx] 的地址段中
add bx,2
loop popData
mov ax,4C00H
int 21h
code ENDS
END start
r
AX=0000 BX=0000 CX=005A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0E14 ES=0E14 SS=0E23 CS=0E24 IP=0030 NV UP EI PL NZ NA PO NC
0E24:0030 8CC8 mov AX,CS
-d cs:0 2F
0E24:0000 23 01 34 12 45 23 56 34-67 45 78 56 89 67 9A 78 #.4.E#V4gExV.g.x
0E24:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0E24:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-u
0E24:0030 8CC8 mov AX,CS
0E24:0032 8ED0 mov SS,AX
0E24:0034 BC3000 mov SP,0030
0E24:0037 8CC8 mov AX,CS
0E24:0039 8ED8 mov DS,AX
0E24:003B BB0000 mov BX,0000
0E24:003E B90800 mov CX,0008
0E24:0041 FF37 push [BX]
0E24:0043 83C302 add BX,+02
0E24:0046 E2F9 loop 0041
0E24:0048 BB0000 mov BX,0000
0E24:004B B90800 mov CX,0008
0E24:004E 8F07 pop [BX]
-g 41
AX=0E24 BX=0000 CX=0008 DX=0000 SP=0030 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0041 NV UP EI PL NZ NA PO NC
0E24:0041 FF37 push [BX] DS:0000=0123
-t
AX=0E24 BX=0000 CX=0008 DX=0000 SP=002E BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0043 NV UP EI PL NZ NA PO NC
0E24:0043 83C302 add BX,+02
-d cs:0 2F
0E24:0000 23 01 34 12 45 23 56 34-67 45 78 56 89 67 9A 78 #.4.E#V4gExV.g.x
0E24:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0E24:0020 00 00 00 00 24 0E 00 00-43 00 24 0E 21 08 23 01 ....$...C.$.!.#.
-t
AX=0E24 BX=0002 CX=0008 DX=0000 SP=002E BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0046 NV UP EI PL NZ NA PO NC
0E24:0046 E2F9 loop 0041
-p
AX=0E24 BX=0010 CX=0000 DX=0000 SP=0020 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0048 NV UP EI PL NZ AC PO NC
0E24:0048 BB0000 mov BX,0000
-d cs:0 2F
0E24:0000 23 01 34 12 45 23 56 34-67 45 78 56 89 67 9A 78 #.4.E#V4gExV.g.x
0E24:0010 00 00 00 00 00 00 00 00-00 00 48 00 24 0E 21 08 ..........H.$.!.
0E24:0020 9A 78 89 67 78 56 67 45-56 34 45 23 34 12 23 01 .x.gxVgEV4E#4.#.
# 弹出
-r
AX=0E24 BX=0010 CX=0000 DX=0000 SP=0020 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0048 NV UP EI PL NZ AC PO NC
0E24:0048 BB0000 mov BX,0000
-t
AX=0E24 BX=0000 CX=0000 DX=0000 SP=0020 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=004B NV UP EI PL NZ AC PO NC
0E24:004B B90800 mov CX,0008
-t
AX=0E24 BX=0000 CX=0008 DX=0000 SP=0020 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=004E NV UP EI PL NZ AC PO NC
0E24:004E 8F07 pop [BX] DS:0000=0123
-t
AX=0E24 BX=0000 CX=0008 DX=0000 SP=0022 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0050 NV UP EI PL NZ AC PO NC
0E24:0050 83C302 add BX,+02
-d cs:0 2F
0E24:0000 9A 78 34 12 45 23 56 34-67 45 78 56 89 67 9A 78 .x4.E#V4gExV.g.x
0E24:0010 00 00 00 00 00 00 24 0E-24 0E 00 00 50 00 24 0E ......$.$...P.$.
0E24:0020 21 08 89 67 78 56 67 45-56 34 45 23 34 12 23 01 !..gxVgEV4E#4.#.
-t
AX=0E24 BX=0002 CX=0008 DX=0000 SP=0022 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0053 NV UP EI PL NZ NA PO NC
0E24:0053 E2F9 loop 004E
-p
AX=0E24 BX=0010 CX=0000 DX=0000 SP=0030 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E24 CS=0E24 IP=0055 NV UP EI PL NZ AC PO NC
0E24:0055 B8004C mov AX,4C00
-d cs:0 2F
0E24:0000 9A 78 89 67 78 56 67 45-56 34 45 23 34 12 23 01 .x.gxVgEV4E#4.#.
0E24:0010 00 00 00 00 00 00 24 0E-24 0E 00 00 53 00 24 0E ......$.$...S.$.
0E24:0020 02 72 89 67 78 56 67 45-00 00 55 00 24 0E 21 08 .r.gxVgE..U.$.!.
- 栈段数据段代码段
ASSUME CS:code,DS:data,SS:stack
; 数据段
data SEGMENT
DW 0123H,1234H,2345H,3456H,4567H,5678H,6789H,789AH
data ENDS
; 栈段
stack SEGMENT stack ; 注意这里再写一次 stack
DW 0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0
stack ENDS
; 代码段
code SEGMENT
start:
; 关联栈段
mov ax, stack
mov ss,ax
mov sp, 16 ; 16个字节
; 关联数据段
mov ax, data
mov ds, ax
; 测试代码
mov bx,0
mov cx,8
; 入栈
; sp-2
copyData:push ds:[bx]
add bx,2 ; 注意这里 +2
loop copyData
; 退出
mov ax,4C00H
int 21h
code ENDS
END start
-u
0E27:0000 B8250E mov AX,0E25
0E27:0003 8ED0 mov SS,AX
0E27:0005 BC1000 mov SP,0010
0E27:0008 B8240E mov AX,0E24
0E27:000B 8ED8 mov DS,AX
0E27:000D BB0000 mov BX,0000
0E27:0010 B90800 mov CX,0008
0E27:0013 FF37 push [BX]
0E27:0015 83C302 add BX,+02
0E27:0018 E2F9 loop 0013
0E27:001A B8004C mov AX,4C00
0E27:001D CD21 int 21
-g 13
AX=0E24 BX=0000 CX=0008 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E25 CS=0E27 IP=0013 NV UP EI PL NZ NA PO NC
0E27:0013 FF37 push [BX] DS:0000=0123
-d ds:0 F
0E24:0000 23 01 34 12 45 23 56 34-67 45 78 56 89 67 9A 78 #.4.E#V4gExV.g.x
-d ss:0 2F
0E25:0000 00 00 00 00 00 00 00 00-00 00 13 00 27 0E 21 08 ............'.!.
0E25:0010 00 00 00 00 00 00 00 00-00 00 00 00 27 0E 02 F2 ............'...
0E25:0020 B8 25 0E 8E D0 BC 10 00-B8 24 0E 8E D8 BB 00 00 .%.......$......
-t
AX=0E24 BX=0000 CX=0008 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E25 CS=0E27 IP=0015 NV UP EI PL NZ NA PO NC
0E27:0015 83C302 add BX,+02
-d ss:0 2F
0E25:0000 00 00 00 00 24 0E 00 00-15 00 27 0E 21 08 23 01 ....$.....'.!.#.
0E25:0010 00 00 00 00 00 00 00 00-00 00 00 00 27 0E 02 F2 ............'...
0E25:0020 B8 25 0E 8E D0 BC 10 00-B8 24 0E 8E D8 BB 00 00 .%.......$......
-t
AX=0E24 BX=0002 CX=0008 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E25 CS=0E27 IP=0018 NV UP EI PL NZ NA PO NC
0E27:0018 E2F9 loop 0013
-p
AX=0E24 BX=0010 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E25 CS=0E27 IP=001A NV UP EI PL NZ AC PO NC
0E27:001A B8004C mov AX,4C00
-d ss:0 2F
0E25:0000 9A 78 89 67 78 56 67 45-56 34 45 23 34 12 23 01 .x.gxVgEV4E#4.#.
0E25:0010 00 00 00 00 00 00 00 00-00 00 00 00 27 0E 02 F2 ............'...
0E25:0020 B8 25 0E 8E D0 BC 10 00-B8 24 0E 8E D8 BB 00 00 .%.......$......
- 观察调试
ASSUME CS:code,DS:data,SS:stack
data SEGMENT
DW 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H
data ENDS
stack SEGMENT stack
DW 0,0,0,0,0,0,0,0
stack ENDS
code SEGMENT
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4C00H
int 21H
code ENDS
END start
-r
AX=0E24 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E25 CS=0E26 IP=001D NV UP EI PL NZ NA PO NC
0E26:001D B8004C mov AX,4C00
-d ds:0
0E24:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09 #.V.............
0E24:0010 00 00 24 0E 24 0E 24 0E-00 00 1D 00 26 0E 21 08 ..$.$.$.....&.!.
0E24:0020 B8 25 0E 8E D0 BC 10 00-B8 24 0E 8E D8 FF 36 00 .%.......$....6.
0E24:0030 00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C ..6............L
0E24:0040 CD 21 00 26 8F 06 78 13-60 1E 26 8B 36 3A 00 26 .!.&..x.`.&.6:.&
0E24:0050 8E 1E 3C 00 8A 14 32 F6-8B 44 01 26 A3 82 13 03 ..<...2..D.&....
0E24:0060 D2 26 8B 3E 4E 13 8C D8-83 FF 00 74 1D 8E DF 8B .&.>N......t....
0E24:0070 36 04 00 8B 3E 00 00 03-F6 74 ED 8B 5C 0E E8 12 6...>....t..\...
-u 0E24:20
0E24:0020 B8250E mov AX,0E25
0E24:0023 8ED0 mov SS,AX
0E24:0025 BC1000 mov SP,0010
0E24:0028 B8240E mov AX,0E24
0E24:002B 8ED8 mov DS,AX
0E24:002D FF360000 push [0000]
0E24:0031 FF360200 push [0002]
0E24:0035 8F060200 pop [0002]
0E24:0039 8F060000 pop [0000]
0E24:003D B8004C mov AX,4C00
-d ss:0 F
0E25:0000 00 00 24 0E 24 0E 24 0E-00 00 1D 00 26 0E 21 08 ..$.$.$.....&.!.
-d cs:0 F
0E26:0000 B8 25 0E 8E D0 BC 10 00-B8 24 0E 8E D8 FF 36 00 .%.......$....6.
- 段补满
- 如果段中的数据占用 N 个字节,则程序加载后,该段实际占用空间为 (N/16 + 1)*16 个字节(只他们的商)
ASSUME CS:code,DS:data,SS:stack
data SEGMENT
DW 0EEH,0EEH
data ENDS
stack SEGMENT stack
DW 0FFH,0FFH
stack ENDS
code SEGMENT
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4C00H
int 21H
code ENDS
END start
-u
0E26:0000 B8250E mov AX,0E25
0E26:0003 8ED0 mov SS,AX
0E26:0005 BC1000 mov SP,0010
0E26:0008 B8240E mov AX,0E24
0E26:000B 8ED8 mov DS,AX
0E26:000D FF360000 push [0000]
0E26:0011 FF360200 push [0002]
0E26:0015 8F060200 pop [0002]
0E26:0019 8F060000 pop [0000]
0E26:001D B8004C mov AX,4C00
-r
AX=0000 BX=0000 CX=0042 DX=0000 SP=0004 BP=0000 SI=0000 DI=0000
DS=0E14 ES=0E14 SS=0E25 CS=0E26 IP=0000 NV UP EI PL NZ NA PO NC
0E26:0000 B8250E mov AX,0E25
-d 0E25:0
0E25:0000 FF 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0E25:0010 B8 25 0E 8E D0 BC 10 00-B8 24 0E 8E D8 FF 36 00 .%.......$....6.
0E25:0020 00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C ..6............L
0E25:0030 CD 21 00 26 8F 06 78 13-60 1E 26 8B 36 3A 00 26 .!.&..x.`.&.6:.&
0E25:0040 8E 1E 3C 00 8A 14 32 F6-8B 44 01 26 A3 82 13 03 ..<...2..D.&....
0E25:0050 D2 26 8B 3E 4E 13 8C D8-83 FF 00 74 1D 8E DF 8B .&.>N......t....
0E25:0060 36 04 00 8B 3E 00 00 03-F6 74 ED 8B 5C 0E E8 12 6...>....t..\...
0E25:0070 0B 73 07 83 EE 02 75 F3-EB DE 8B DA 03 1E 06 00 .s....u.........
-d 0E24:0
0E24:0000 EE 00 EE 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0E24:0010 FF 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0E24:0020 B8 25 0E 8E D0 BC 10 00-B8 24 0E 8E D8 FF 36 00 .%.......$....6.
0E24:0030 00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C ..6............L
0E24:0040 CD 21 00 26 8F 06 78 13-60 1E 26 8B 36 3A 00 26 .!.&..x.`.&.6:.&
0E24:0050 8E 1E 3C 00 8A 14 32 F6-8B 44 01 26 A3 82 13 03 ..<...2..D.&....
0E24:0060 D2 26 8B 3E 4E 13 8C D8-83 FF 00 74 1D 8E DF 8B .&.>N......t....
0E24:0070 36 04 00 8B 3E 00 00 03-F6 74 ED 8B 5C 0E E8 12 6...>....t..\...
如果 DW 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H,0654H
-u
0E27:0000 B8260E mov AX,0E26
0E27:0003 8ED0 mov SS,AX
0E27:0005 BC1000 mov SP,0010
0E27:0008 B8240E mov AX,0E24
0E27:000B 8ED8 mov DS,AX
0E27:000D FF360000 push [0000]
0E27:0011 FF360200 push [0002]
0E27:0015 8F060200 pop [0002]
0E27:0019 8F060000 pop [0000]
0E27:001D B8004C mov AX,4C00
-d 0E24:0
0E24:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09 #.V.............
0E24:0010 54 06 00 00 00 00 00 00-00 00 00 00 00 00 00 00 T...............
0E24:0020 FF 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0E24:0030 B8 26 0E 8E D0 BC 10 00-B8 24 0E 8E D8 FF 36 00 .&.......$....6.
0E24:0040 00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C ..6............L
0E24:0050 CD 21 3C 00 8A 14 32 F6-8B 44 01 26 A3 82 13 03 .!<...2..D.&....
0E24:0060 D2 26 8B 3E 4E 13 8C D8-83 FF 00 74 1D 8E DF 8B .&.>N......t....
0E24:0070 36 04 00 8B 3E 00 00 03-F6 74 ED 8B 5C 0E E8 12 6...>....t..\...
-u 0E24:30
0E24:0030 B8260E mov AX,0E26
0E24:0033 8ED0 mov SS,AX
0E24:0035 BC1000 mov SP,0010
0E24:0038 B8240E mov AX,0E24
0E24:003B 8ED8 mov DS,AX
0E24:003D FF360000 push [0000]
0E24:0041 FF360200 push [0002]
0E24:0045 8F060200 pop [0002]
0E24:0049 8F060000 pop [0000]
0E24:004D B8004C mov AX,4C00
- 定义DB
ASSUME CS:code
a SEGMENT
DB 1,2,3,4,5,6,7,8
a ENDS
b SEGMENT
DB 1,2,3,4,5,6,7,8
b ENDS
code SEGMENT
start:
mov ax,a
mov ds,ax
mov ax,4C00H
int 21H
code ENDS
END start
-r
AX=0E24 BX=0000 CX=002A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0E24 ES=0E14 SS=0E23 CS=0E26 IP=0005 NV UP EI PL NZ NA PO NC
0E26:0005 B8004C mov AX,4C00
-d ds:0
0E24:0000 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
0E24:0010 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
0E24:0020 B8 24 0E 8E D8 B8 00 4C-CD 21 6D 06 58 00 06 2E .$.....L.!m.X...
0E24:0030 8E 06 00 00 26 8F 06 7E-13 26 8F 06 3A 00 26 8F ....&..~.&..:.&.
0E24:0040 06 3C 00 26 8F 06 78 13-60 1E 26 8B 36 3A 00 26 .<.&..x.`.&.6:.&
0E24:0050 8E 1E 3C 00 8A 14 32 F6-8B 44 01 26 A3 82 13 03 ..<...2..D.&....
0E24:0060 D2 26 8B 3E 4E 13 8C D8-83 FF 00 74 1D 8E DF 8B .&.>N......t....
0E24:0070 36 04 00 8B 3E 00 00 03-F6 74 ED 8B 5C 0E E8 12 6...>....t..\...
- 用push将a中的前8个字型数据逆序放到b中
ASSUME CS:code
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
code SEGMENT
start:
mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10H
mov cx,8
mov bx,0
moveNum:push ds:[bx]
add bx,2
loop moveNum
mov ax,4C00H
int 21H
code ENDS
END start