鱼C论坛

 找回密码
 立即注册
查看: 3656|回复: 13

[已解决]一道题目,想很久没想出来结果

[复制链接]
发表于 2022-4-13 11:38:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
STACK SEGMENT AT 3000H
STA DW 32 DUP(?)
TOP EQU $-STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
XOR AL,AL
INC AL
MOV BX,0FFFFH
CALL SUB1
X1:
ADD AL,BL
X2:
MOV BL,AL
HLT
SUB1 PROC NEAR
MOV BX,OFFSET X2
PUSH BX
RET
SUB1 ENDP
CODE ENDS
END START
题目要求:画出堆栈最满时各单元的地址和内容;并写出程序执行完毕后,SP和AL的值
最佳答案
2022-4-14 16:11:10
1. 最满是什么意思?
就是堆栈中保存的内容最多的那一次?
这个 “各单元” 指的是什么?
是要堆栈中有效数据的地址和内容,还是32个dw都要?


堆栈中只有两个数据,一个是 0x12,另一个是 0x14
其他空间全部没有使用
0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
0x0000000000030030 <bogus+      48>:        0x5ea4        0x5f1f        0x5907        0xc35d        0x8955        0x51e5        0x0014        0x0012

2. 这个程序可以执行完?
执行完是什么意思?这个程序可以返回给dos操作系统?
hlt指令要配合cli指令的话,可以认为是执行到这里就完成了,但是这个程序只有一个hlt指令
hlt指令执行后,一段时间之后程序会醒过来继续执行hlt后面的指令
这个程序不会执行完成
你非要认为执行了hlt指令后就算是执行完成的话
al 中的值一直都是 1
sp 执行到 hlt 的位置,sp 的值是 0x3e
rax: 00000000_00043001
rbx: 00000000_00000001
rcx: 00000000_0009001c
rdx: 00000000_00000000
rsp: 00000000_0000003e


下面是调试过程
========================================================================
                        Bochs x86 Emulator 2.7
              Built from SVN snapshot on August  1, 2021
                Timestamp: Sun Aug  1 10:07:00 CEST 2021
========================================================================
00000000000i[      ] BXSHARE not set. using compile time default '/usr/share/bochs'
00000000000i[      ] reading configuration from bochsrc
00000000000e[      ] bochsrc:16: ataX-master/slave CHS set to 0/0/0 - autodetection enabled
00000000000i[      ] installing x module as the Bochs GUI
00000000000i[      ] using log file /dev/null
Next at t=0
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
<bochs:1> c
^CNext at t=2308337481
(0) [0x0000000f51ca] f000:51ca (unk. ctxt): ret                       ; c3
<bochs:2> b 0x11aa:0x0000
<bochs:3> c
(0) Breakpoint 1, 0x0000000000011aa0 in ?? ()
Next at t=2370828743
(0) [0x000000011aa0] 11aa:0000 (unk. ctxt): mov ax, 0x3000            ; b80030
<bochs:4> s
Next at t=2370828744
(0) [0x000000011aa3] 11aa:0003 (unk. ctxt): mov ss, ax                ; 8ed0
<bochs:5> 
Next at t=2370828745
(0) [0x000000011aa5] 11aa:0005 (unk. ctxt): mov sp, 0x0040            ; bc4000
<bochs:6> 
Next at t=2370828746
(0) [0x000000011aa8] 11aa:0008 (unk. ctxt): xor al, al                ; 32c0
<bochs:7> 
Next at t=2370828747
(0) [0x000000011aaa] 11aa:000a (unk. ctxt): inc al                    ; fec0
<bochs:8> 
Next at t=2370828748
(0) [0x000000011aac] 11aa:000c (unk. ctxt): mov bx, 0xffff            ; bbffff
<bochs:9> 
Next at t=2370828749
(0) [0x000000011aaf] 11aa:000f (unk. ctxt): call .+5  (0x00011ab7)    ; e80500
<bochs:10> s
Next at t=2370828750
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:11> 
Next at t=2370828751
(0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
<bochs:12> 
Next at t=2370828752
(0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
<bochs:13> 
Next at t=2370828753
(0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
<bochs:14> 
Next at t=2370828754
(0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
<bochs:15> reg
CPU0:
rax: 00000000_00043001
rbx: 00000000_00000001
rcx: 00000000_0009001c
rdx: 00000000_00000000
rsp: 00000000_0000003e
rbp: 00000000_00000000
rsi: 00000000_000e0000
rdi: 00000000_00000000
r8 : 00000000_00000000
r9 : 00000000_00000000
r10: 00000000_00000000
r11: 00000000_00000000
r12: 00000000_00000000
r13: 00000000_00000000
r14: 00000000_00000000
r15: 00000000_00000000
rip: 00000000_00000016
eflags 0x00007202: id vip vif ac vm rf NT IOPL=3 of df IF tf sf zf af pf cf
<bochs:16> x/32hx 0x3000:0x0000
[bochs]:
0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
0x0000000000030030 <bogus+      48>:        0x5ea4        0x5f1f        0x5907        0xc35d        0x8955        0x51e5        0x0014        0x0012
<bochs:17> s
Next at t=2370828755
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:18> s
Next at t=2371540006
(0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
<bochs:19> u/10
0000000000006454: (                    ): cli                       ; fa
0000000000006455: (                    ): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
000000000000645b: (                    ): jnz .+16  (0x0000646d)    ; 7510
000000000000645d: (                    ): inc byte ptr cs:0x23ba    ; 2efe06ba23
0000000000006462: (                    ): callf cs:0x23c8           ; 2eff1ec823
0000000000006467: (                    ): dec byte ptr cs:0x23ba    ; 2efe0eba23
000000000000646c: (                    ): iret                      ; cf
000000000000646d: (                    ): push ax                   ; 50
000000000000646e: (                    ): push es                   ; 06
000000000000646f: (                    ): mov es, word ptr cs:0x1921 ; 2e8e062119
<bochs:20> n
Next at t=2371540007
(0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
<bochs:21> n
Next at t=2371540008
(0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
<bochs:22> 
Next at t=2371540009
(0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
<bochs:23> 
Next at t=2371540010
(0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
<bochs:24> 
Next at t=2371540266
(0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
<bochs:25> 
Next at t=2371540267
(0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
<bochs:26> 
Next at t=2371540268
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:27> n
Next at t=2371540269
(0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
<bochs:28> 
Next at t=2371540270
(0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
<bochs:29> 
Next at t=2371540271
(0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
<bochs:30> 
Next at t=2371540272
(0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
<bochs:31> s
Next at t=2371540273
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:32> s
Next at t=2371580004
(0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
<bochs:33> n
Next at t=2371580005
(0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
<bochs:34> 
Next at t=2371580006
(0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
<bochs:35> 
Next at t=2371580007
(0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
<bochs:36> 
Next at t=2371580008
(0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
<bochs:37> 
Next at t=2371580253
(0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
<bochs:38> 
Next at t=2371580254
(0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
<bochs:39> 
Next at t=2371580255
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:40> n
Next at t=2371580256
(0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
<bochs:41> 
Next at t=2371580257
(0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
<bochs:42> 
Next at t=2371580258
(0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
<bochs:43> 
Next at t=2371580259
(0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
<bochs:44> 

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-13 11:40:08 | 显示全部楼层

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-13 11:40:43 | 显示全部楼层

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-13 11:49:08 | 显示全部楼层
STACK SEGMENT AT 3000H;这应该是告诉段开始的位置在3000H
STA DW 32 DUP(?);定义了32个字的空间
TOP EQU $-STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
XOR AL,AL;AL=0FFH
INC AL;AL=00H
MOV BX,0FFFFH;BX=0FFFFH
CALL SUB1;转去执行SUB1
X1:
ADD AL,BL;由于段内偏移地址BX入栈了,那么这里BX=0FFFFH,AL=0FFH
X2:
MOV BL,AL
HLT
SUB1 PROC NEAR
MOV BX,OFFSET X2;获取X2的段内偏移地址给BX
PUSH BX;BX入栈保存
RET ;返回继续执行
SUB1 ENDP
CODE ENDS
END START
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 15:50:51 | 显示全部楼层
汇编吗这是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-13 21:47:16 | 显示全部楼层

36题确实是汇编,没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-14 16:11:10 | 显示全部楼层    本楼为最佳答案   
1. 最满是什么意思?
就是堆栈中保存的内容最多的那一次?
这个 “各单元” 指的是什么?
是要堆栈中有效数据的地址和内容,还是32个dw都要?


堆栈中只有两个数据,一个是 0x12,另一个是 0x14
其他空间全部没有使用
0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
0x0000000000030030 <bogus+      48>:        0x5ea4        0x5f1f        0x5907        0xc35d        0x8955        0x51e5        0x0014        0x0012

2. 这个程序可以执行完?
执行完是什么意思?这个程序可以返回给dos操作系统?
hlt指令要配合cli指令的话,可以认为是执行到这里就完成了,但是这个程序只有一个hlt指令
hlt指令执行后,一段时间之后程序会醒过来继续执行hlt后面的指令
这个程序不会执行完成
你非要认为执行了hlt指令后就算是执行完成的话
al 中的值一直都是 1
sp 执行到 hlt 的位置,sp 的值是 0x3e
rax: 00000000_00043001
rbx: 00000000_00000001
rcx: 00000000_0009001c
rdx: 00000000_00000000
rsp: 00000000_0000003e


下面是调试过程
========================================================================
                        Bochs x86 Emulator 2.7
              Built from SVN snapshot on August  1, 2021
                Timestamp: Sun Aug  1 10:07:00 CEST 2021
========================================================================
00000000000i[      ] BXSHARE not set. using compile time default '/usr/share/bochs'
00000000000i[      ] reading configuration from bochsrc
00000000000e[      ] bochsrc:16: ataX-master/slave CHS set to 0/0/0 - autodetection enabled
00000000000i[      ] installing x module as the Bochs GUI
00000000000i[      ] using log file /dev/null
Next at t=0
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
<bochs:1> c
^CNext at t=2308337481
(0) [0x0000000f51ca] f000:51ca (unk. ctxt): ret                       ; c3
<bochs:2> b 0x11aa:0x0000
<bochs:3> c
(0) Breakpoint 1, 0x0000000000011aa0 in ?? ()
Next at t=2370828743
(0) [0x000000011aa0] 11aa:0000 (unk. ctxt): mov ax, 0x3000            ; b80030
<bochs:4> s
Next at t=2370828744
(0) [0x000000011aa3] 11aa:0003 (unk. ctxt): mov ss, ax                ; 8ed0
<bochs:5> 
Next at t=2370828745
(0) [0x000000011aa5] 11aa:0005 (unk. ctxt): mov sp, 0x0040            ; bc4000
<bochs:6> 
Next at t=2370828746
(0) [0x000000011aa8] 11aa:0008 (unk. ctxt): xor al, al                ; 32c0
<bochs:7> 
Next at t=2370828747
(0) [0x000000011aaa] 11aa:000a (unk. ctxt): inc al                    ; fec0
<bochs:8> 
Next at t=2370828748
(0) [0x000000011aac] 11aa:000c (unk. ctxt): mov bx, 0xffff            ; bbffff
<bochs:9> 
Next at t=2370828749
(0) [0x000000011aaf] 11aa:000f (unk. ctxt): call .+5  (0x00011ab7)    ; e80500
<bochs:10> s
Next at t=2370828750
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:11> 
Next at t=2370828751
(0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
<bochs:12> 
Next at t=2370828752
(0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
<bochs:13> 
Next at t=2370828753
(0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
<bochs:14> 
Next at t=2370828754
(0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
<bochs:15> reg
CPU0:
rax: 00000000_00043001
rbx: 00000000_00000001
rcx: 00000000_0009001c
rdx: 00000000_00000000
rsp: 00000000_0000003e
rbp: 00000000_00000000
rsi: 00000000_000e0000
rdi: 00000000_00000000
r8 : 00000000_00000000
r9 : 00000000_00000000
r10: 00000000_00000000
r11: 00000000_00000000
r12: 00000000_00000000
r13: 00000000_00000000
r14: 00000000_00000000
r15: 00000000_00000000
rip: 00000000_00000016
eflags 0x00007202: id vip vif ac vm rf NT IOPL=3 of df IF tf sf zf af pf cf
<bochs:16> x/32hx 0x3000:0x0000
[bochs]:
0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
0x0000000000030030 <bogus+      48>:        0x5ea4        0x5f1f        0x5907        0xc35d        0x8955        0x51e5        0x0014        0x0012
<bochs:17> s
Next at t=2370828755
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:18> s
Next at t=2371540006
(0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
<bochs:19> u/10
0000000000006454: (                    ): cli                       ; fa
0000000000006455: (                    ): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
000000000000645b: (                    ): jnz .+16  (0x0000646d)    ; 7510
000000000000645d: (                    ): inc byte ptr cs:0x23ba    ; 2efe06ba23
0000000000006462: (                    ): callf cs:0x23c8           ; 2eff1ec823
0000000000006467: (                    ): dec byte ptr cs:0x23ba    ; 2efe0eba23
000000000000646c: (                    ): iret                      ; cf
000000000000646d: (                    ): push ax                   ; 50
000000000000646e: (                    ): push es                   ; 06
000000000000646f: (                    ): mov es, word ptr cs:0x1921 ; 2e8e062119
<bochs:20> n
Next at t=2371540007
(0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
<bochs:21> n
Next at t=2371540008
(0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
<bochs:22> 
Next at t=2371540009
(0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
<bochs:23> 
Next at t=2371540010
(0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
<bochs:24> 
Next at t=2371540266
(0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
<bochs:25> 
Next at t=2371540267
(0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
<bochs:26> 
Next at t=2371540268
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:27> n
Next at t=2371540269
(0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
<bochs:28> 
Next at t=2371540270
(0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
<bochs:29> 
Next at t=2371540271
(0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
<bochs:30> 
Next at t=2371540272
(0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
<bochs:31> s
Next at t=2371540273
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:32> s
Next at t=2371580004
(0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
<bochs:33> n
Next at t=2371580005
(0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
<bochs:34> 
Next at t=2371580006
(0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
<bochs:35> 
Next at t=2371580007
(0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
<bochs:36> 
Next at t=2371580008
(0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
<bochs:37> 
Next at t=2371580253
(0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
<bochs:38> 
Next at t=2371580254
(0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
<bochs:39> 
Next at t=2371580255
(0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
<bochs:40> n
Next at t=2371580256
(0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
<bochs:41> 
Next at t=2371580257
(0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
<bochs:42> 
Next at t=2371580258
(0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
<bochs:43> 
Next at t=2371580259
(0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
<bochs:44> 

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-14 22:36:07 | 显示全部楼层
人造人 发表于 2022-4-14 16:11
1. 最满是什么意思?
就是堆栈中保存的内容最多的那一次?
这个 “各单元” 指的是什么?

大佬,您能给个联系方式么?有些我没有搞懂,想咨询下,我的QQ:28911428,期望能够加个QQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-14 22:55:16 | 显示全部楼层
人造人 发表于 2022-4-14 16:11
1. 最满是什么意思?
就是堆栈中保存的内容最多的那一次?
这个 “各单元” 指的是什么?

1、我理解的各单元应该是32个dw都要;
2、这个程序执行完,我可以确定这个程序不能返回DOS,返回DOS的话应该还要加上INT语句这里显然没有,所以我也认为执行完hlt就完了
3、我不清楚的地方,堆栈中数据0x12,0x14是怎么来的
4、我尝试Emu8086这个软件去调试,但是报错,报错内容是MOV SP,TOP这句错误参数,软件直接将这句翻译成了MOV SP,$-STA
5、如果大佬方便的话,能给这些语句在后面注释一下么?现在看来,我自己写的注释全部是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-15 00:53:42 | 显示全部楼层
hg870827 发表于 2022-4-14 22:55
1、我理解的各单元应该是32个dw都要;
2、这个程序执行完,我可以确定这个程序不能返回DOS,返回DOS的话 ...

3. CALL SUB1 和 PUSH BX
4. 用bochs试试
5. 你哪里不懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-15 14:28:06 | 显示全部楼层
人造人 发表于 2022-4-15 00:53
3. CALL SUB1 和 PUSH BX
4. 用bochs试试
5. 你哪里不懂?

BOCHS是配置DOS环境吗?有没有参考的配置文章,我今天尝试了半天也不行,这个只是个模拟器,还需要配置环境
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-15 14:28:54 | 显示全部楼层
本帖最后由 hg870827 于 2022-4-15 14:30 编辑
人造人 发表于 2022-4-15 00:53
3. CALL SUB1 和 PUSH BX
4. 用bochs试试
5. 你哪里不懂?


另外我不懂的地方在于:1、MOV SP,0040是怎么来的?如果确定出来的?
2、MOV BX,OFFSET X2这个是怎么计算出段内偏移地址的?
有好些这样的问题,没弄明白,学得一知半解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-15 18:39:23 | 显示全部楼层
hg870827 发表于 2022-4-15 14:28
BOCHS是配置DOS环境吗?有没有参考的配置文章,我今天尝试了半天也不行,这个只是个模拟器,还需要配置环 ...

bochs 就是一个模拟器
要先在bochs中安装一个dos操作系统
好像并没有什么教程,这些东西要自己去探索
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-15 18:42:53 | 显示全部楼层
hg870827 发表于 2022-4-15 14:28
另外我不懂的地方在于:1、MOV SP,0040是怎么来的?如果确定出来的?
2、MOV BX,OFFSET X2这个是怎么 ...

1. TOP EQU $-STA
equ用来定义常量
$就是当前位置,当前位置 - STA
STA 是在stack段的偏移为 0 的位置
这个当前位置是 32 个 dw 的位置
就是 偏移为64的位置,就是 0x40

2. 就是 X2 这个标号的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表