鱼C论坛

 找回密码
 立即注册
查看: 3994|回复: 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
其他空间全部没有使用
  1. 0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
  2. 0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
  3. 0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
  4. 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

  1. rax: 00000000_00043001
  2. rbx: 00000000_00000001
  3. rcx: 00000000_0009001c
  4. rdx: 00000000_00000000
  5. rsp: 00000000_0000003e
复制代码



下面是调试过程
  1. ========================================================================
  2.                         Bochs x86 Emulator 2.7
  3.               Built from SVN snapshot on August  1, 2021
  4.                 Timestamp: Sun Aug  1 10:07:00 CEST 2021
  5. ========================================================================
  6. 00000000000i[      ] BXSHARE not set. using compile time default '/usr/share/bochs'
  7. 00000000000i[      ] reading configuration from bochsrc
  8. 00000000000e[      ] bochsrc:16: ataX-master/slave CHS set to 0/0/0 - autodetection enabled
  9. 00000000000i[      ] installing x module as the Bochs GUI
  10. 00000000000i[      ] using log file /dev/null
  11. Next at t=0
  12. (0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
  13. <bochs:1> c
  14. ^CNext at t=2308337481
  15. (0) [0x0000000f51ca] f000:51ca (unk. ctxt): ret                       ; c3
  16. <bochs:2> b 0x11aa:0x0000
  17. <bochs:3> c
  18. (0) Breakpoint 1, 0x0000000000011aa0 in ?? ()
  19. Next at t=2370828743
  20. (0) [0x000000011aa0] 11aa:0000 (unk. ctxt): mov ax, 0x3000            ; b80030
  21. <bochs:4> s
  22. Next at t=2370828744
  23. (0) [0x000000011aa3] 11aa:0003 (unk. ctxt): mov ss, ax                ; 8ed0
  24. <bochs:5>
  25. Next at t=2370828745
  26. (0) [0x000000011aa5] 11aa:0005 (unk. ctxt): mov sp, 0x0040            ; bc4000
  27. <bochs:6>
  28. Next at t=2370828746
  29. (0) [0x000000011aa8] 11aa:0008 (unk. ctxt): xor al, al                ; 32c0
  30. <bochs:7>
  31. Next at t=2370828747
  32. (0) [0x000000011aaa] 11aa:000a (unk. ctxt): inc al                    ; fec0
  33. <bochs:8>
  34. Next at t=2370828748
  35. (0) [0x000000011aac] 11aa:000c (unk. ctxt): mov bx, 0xffff            ; bbffff
  36. <bochs:9>
  37. Next at t=2370828749
  38. (0) [0x000000011aaf] 11aa:000f (unk. ctxt): call .+5  (0x00011ab7)    ; e80500
  39. <bochs:10> s
  40. Next at t=2370828750
  41. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  42. <bochs:11>
  43. Next at t=2370828751
  44. (0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
  45. <bochs:12>
  46. Next at t=2370828752
  47. (0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
  48. <bochs:13>
  49. Next at t=2370828753
  50. (0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
  51. <bochs:14>
  52. Next at t=2370828754
  53. (0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
  54. <bochs:15> reg
  55. CPU0:
  56. rax: 00000000_00043001
  57. rbx: 00000000_00000001
  58. rcx: 00000000_0009001c
  59. rdx: 00000000_00000000
  60. rsp: 00000000_0000003e
  61. rbp: 00000000_00000000
  62. rsi: 00000000_000e0000
  63. rdi: 00000000_00000000
  64. r8 : 00000000_00000000
  65. r9 : 00000000_00000000
  66. r10: 00000000_00000000
  67. r11: 00000000_00000000
  68. r12: 00000000_00000000
  69. r13: 00000000_00000000
  70. r14: 00000000_00000000
  71. r15: 00000000_00000000
  72. rip: 00000000_00000016
  73. eflags 0x00007202: id vip vif ac vm rf NT IOPL=3 of df IF tf sf zf af pf cf
  74. <bochs:16> x/32hx 0x3000:0x0000
  75. [bochs]:
  76. 0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
  77. 0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
  78. 0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
  79. 0x0000000000030030 <bogus+      48>:        0x5ea4        0x5f1f        0x5907        0xc35d        0x8955        0x51e5        0x0014        0x0012
  80. <bochs:17> s
  81. Next at t=2370828755
  82. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  83. <bochs:18> s
  84. Next at t=2371540006
  85. (0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
  86. <bochs:19> u/10
  87. 0000000000006454: (                    ): cli                       ; fa
  88. 0000000000006455: (                    ): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
  89. 000000000000645b: (                    ): jnz .+16  (0x0000646d)    ; 7510
  90. 000000000000645d: (                    ): inc byte ptr cs:0x23ba    ; 2efe06ba23
  91. 0000000000006462: (                    ): callf cs:0x23c8           ; 2eff1ec823
  92. 0000000000006467: (                    ): dec byte ptr cs:0x23ba    ; 2efe0eba23
  93. 000000000000646c: (                    ): iret                      ; cf
  94. 000000000000646d: (                    ): push ax                   ; 50
  95. 000000000000646e: (                    ): push es                   ; 06
  96. 000000000000646f: (                    ): mov es, word ptr cs:0x1921 ; 2e8e062119
  97. <bochs:20> n
  98. Next at t=2371540007
  99. (0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
  100. <bochs:21> n
  101. Next at t=2371540008
  102. (0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
  103. <bochs:22>
  104. Next at t=2371540009
  105. (0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
  106. <bochs:23>
  107. Next at t=2371540010
  108. (0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
  109. <bochs:24>
  110. Next at t=2371540266
  111. (0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
  112. <bochs:25>
  113. Next at t=2371540267
  114. (0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
  115. <bochs:26>
  116. Next at t=2371540268
  117. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  118. <bochs:27> n
  119. Next at t=2371540269
  120. (0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
  121. <bochs:28>
  122. Next at t=2371540270
  123. (0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
  124. <bochs:29>
  125. Next at t=2371540271
  126. (0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
  127. <bochs:30>
  128. Next at t=2371540272
  129. (0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
  130. <bochs:31> s
  131. Next at t=2371540273
  132. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  133. <bochs:32> s
  134. Next at t=2371580004
  135. (0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
  136. <bochs:33> n
  137. Next at t=2371580005
  138. (0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
  139. <bochs:34>
  140. Next at t=2371580006
  141. (0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
  142. <bochs:35>
  143. Next at t=2371580007
  144. (0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
  145. <bochs:36>
  146. Next at t=2371580008
  147. (0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
  148. <bochs:37>
  149. Next at t=2371580253
  150. (0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
  151. <bochs:38>
  152. Next at t=2371580254
  153. (0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
  154. <bochs:39>
  155. Next at t=2371580255
  156. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  157. <bochs:40> n
  158. Next at t=2371580256
  159. (0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
  160. <bochs:41>
  161. Next at t=2371580257
  162. (0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
  163. <bochs:42>
  164. Next at t=2371580258
  165. (0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
  166. <bochs:43>
  167. Next at t=2371580259
  168. (0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
  169. <bochs:44>
复制代码


1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 15:50:51 | 显示全部楼层
汇编吗这是
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

36题确实是汇编,没错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


堆栈中只有两个数据,一个是 0x12,另一个是 0x14
其他空间全部没有使用
  1. 0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
  2. 0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
  3. 0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
  4. 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

  1. rax: 00000000_00043001
  2. rbx: 00000000_00000001
  3. rcx: 00000000_0009001c
  4. rdx: 00000000_00000000
  5. rsp: 00000000_0000003e
复制代码



下面是调试过程
  1. ========================================================================
  2.                         Bochs x86 Emulator 2.7
  3.               Built from SVN snapshot on August  1, 2021
  4.                 Timestamp: Sun Aug  1 10:07:00 CEST 2021
  5. ========================================================================
  6. 00000000000i[      ] BXSHARE not set. using compile time default '/usr/share/bochs'
  7. 00000000000i[      ] reading configuration from bochsrc
  8. 00000000000e[      ] bochsrc:16: ataX-master/slave CHS set to 0/0/0 - autodetection enabled
  9. 00000000000i[      ] installing x module as the Bochs GUI
  10. 00000000000i[      ] using log file /dev/null
  11. Next at t=0
  12. (0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
  13. <bochs:1> c
  14. ^CNext at t=2308337481
  15. (0) [0x0000000f51ca] f000:51ca (unk. ctxt): ret                       ; c3
  16. <bochs:2> b 0x11aa:0x0000
  17. <bochs:3> c
  18. (0) Breakpoint 1, 0x0000000000011aa0 in ?? ()
  19. Next at t=2370828743
  20. (0) [0x000000011aa0] 11aa:0000 (unk. ctxt): mov ax, 0x3000            ; b80030
  21. <bochs:4> s
  22. Next at t=2370828744
  23. (0) [0x000000011aa3] 11aa:0003 (unk. ctxt): mov ss, ax                ; 8ed0
  24. <bochs:5>
  25. Next at t=2370828745
  26. (0) [0x000000011aa5] 11aa:0005 (unk. ctxt): mov sp, 0x0040            ; bc4000
  27. <bochs:6>
  28. Next at t=2370828746
  29. (0) [0x000000011aa8] 11aa:0008 (unk. ctxt): xor al, al                ; 32c0
  30. <bochs:7>
  31. Next at t=2370828747
  32. (0) [0x000000011aaa] 11aa:000a (unk. ctxt): inc al                    ; fec0
  33. <bochs:8>
  34. Next at t=2370828748
  35. (0) [0x000000011aac] 11aa:000c (unk. ctxt): mov bx, 0xffff            ; bbffff
  36. <bochs:9>
  37. Next at t=2370828749
  38. (0) [0x000000011aaf] 11aa:000f (unk. ctxt): call .+5  (0x00011ab7)    ; e80500
  39. <bochs:10> s
  40. Next at t=2370828750
  41. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  42. <bochs:11>
  43. Next at t=2370828751
  44. (0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
  45. <bochs:12>
  46. Next at t=2370828752
  47. (0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
  48. <bochs:13>
  49. Next at t=2370828753
  50. (0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
  51. <bochs:14>
  52. Next at t=2370828754
  53. (0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
  54. <bochs:15> reg
  55. CPU0:
  56. rax: 00000000_00043001
  57. rbx: 00000000_00000001
  58. rcx: 00000000_0009001c
  59. rdx: 00000000_00000000
  60. rsp: 00000000_0000003e
  61. rbp: 00000000_00000000
  62. rsi: 00000000_000e0000
  63. rdi: 00000000_00000000
  64. r8 : 00000000_00000000
  65. r9 : 00000000_00000000
  66. r10: 00000000_00000000
  67. r11: 00000000_00000000
  68. r12: 00000000_00000000
  69. r13: 00000000_00000000
  70. r14: 00000000_00000000
  71. r15: 00000000_00000000
  72. rip: 00000000_00000016
  73. eflags 0x00007202: id vip vif ac vm rf NT IOPL=3 of df IF tf sf zf af pf cf
  74. <bochs:16> x/32hx 0x3000:0x0000
  75. [bochs]:
  76. 0x0000000000030000 <bogus+       0>:        0x8955        0x50e5        0x0651        0x8b57        0x0a4e        0x09e3        0x7ec4        0x8a06
  77. 0x0000000000030010 <bogus+      16>:        0x0446        0xf3fc        0x5faa        0x5907        0x5d58        0x55c3        0xe589        0x0651
  78. 0x0000000000030020 <bogus+      32>:        0x1e57        0x8b56        0x0c4e        0x09e3        0x7ec4        0xc504        0x0876        0xf3fc
  79. 0x0000000000030030 <bogus+      48>:        0x5ea4        0x5f1f        0x5907        0xc35d        0x8955        0x51e5        0x0014        0x0012
  80. <bochs:17> s
  81. Next at t=2370828755
  82. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  83. <bochs:18> s
  84. Next at t=2371540006
  85. (0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
  86. <bochs:19> u/10
  87. 0000000000006454: (                    ): cli                       ; fa
  88. 0000000000006455: (                    ): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
  89. 000000000000645b: (                    ): jnz .+16  (0x0000646d)    ; 7510
  90. 000000000000645d: (                    ): inc byte ptr cs:0x23ba    ; 2efe06ba23
  91. 0000000000006462: (                    ): callf cs:0x23c8           ; 2eff1ec823
  92. 0000000000006467: (                    ): dec byte ptr cs:0x23ba    ; 2efe0eba23
  93. 000000000000646c: (                    ): iret                      ; cf
  94. 000000000000646d: (                    ): push ax                   ; 50
  95. 000000000000646e: (                    ): push es                   ; 06
  96. 000000000000646f: (                    ): mov es, word ptr cs:0x1921 ; 2e8e062119
  97. <bochs:20> n
  98. Next at t=2371540007
  99. (0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
  100. <bochs:21> n
  101. Next at t=2371540008
  102. (0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
  103. <bochs:22>
  104. Next at t=2371540009
  105. (0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
  106. <bochs:23>
  107. Next at t=2371540010
  108. (0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
  109. <bochs:24>
  110. Next at t=2371540266
  111. (0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
  112. <bochs:25>
  113. Next at t=2371540267
  114. (0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
  115. <bochs:26>
  116. Next at t=2371540268
  117. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  118. <bochs:27> n
  119. Next at t=2371540269
  120. (0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
  121. <bochs:28>
  122. Next at t=2371540270
  123. (0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
  124. <bochs:29>
  125. Next at t=2371540271
  126. (0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
  127. <bochs:30>
  128. Next at t=2371540272
  129. (0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
  130. <bochs:31> s
  131. Next at t=2371540273
  132. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  133. <bochs:32> s
  134. Next at t=2371580004
  135. (0) [0x000000006454] 04b3:1924 (unk. ctxt): cli                       ; fa
  136. <bochs:33> n
  137. Next at t=2371580005
  138. (0) [0x000000006455] 04b3:1925 (unk. ctxt): cmp word ptr cs:0x23b0, 0x0000 ; 2e833eb02300
  139. <bochs:34>
  140. Next at t=2371580006
  141. (0) [0x00000000645b] 04b3:192b (unk. ctxt): jnz .+16  (0x0000646d)    ; 7510
  142. <bochs:35>
  143. Next at t=2371580007
  144. (0) [0x00000000645d] 04b3:192d (unk. ctxt): inc byte ptr cs:0x23ba    ; 2efe06ba23
  145. <bochs:36>
  146. Next at t=2371580008
  147. (0) [0x000000006462] 04b3:1932 (unk. ctxt): callf cs:0x23c8           ; 2eff1ec823
  148. <bochs:37>
  149. Next at t=2371580253
  150. (0) [0x000000006467] 04b3:1937 (unk. ctxt): dec byte ptr cs:0x23ba    ; 2efe0eba23
  151. <bochs:38>
  152. Next at t=2371580254
  153. (0) [0x00000000646c] 04b3:193c (unk. ctxt): iret                      ; cf
  154. <bochs:39>
  155. Next at t=2371580255
  156. (0) [0x000000011ab7] 11aa:0017 (unk. ctxt): mov bx, 0x0014            ; bb1400
  157. <bochs:40> n
  158. Next at t=2371580256
  159. (0) [0x000000011aba] 11aa:001a (unk. ctxt): push bx                   ; 53
  160. <bochs:41>
  161. Next at t=2371580257
  162. (0) [0x000000011abb] 11aa:001b (unk. ctxt): ret                       ; c3
  163. <bochs:42>
  164. Next at t=2371580258
  165. (0) [0x000000011ab4] 11aa:0014 (unk. ctxt): mov bl, al                ; 8ad8
  166. <bochs:43>
  167. Next at t=2371580259
  168. (0) [0x000000011ab6] 11aa:0016 (unk. ctxt): hlt                       ; f4
  169. <bochs:44>
复制代码


1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬,您能给个联系方式么?有些我没有搞懂,想咨询下,我的QQ:28911428,期望能够加个QQ
小甲鱼最新课程 -> https://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、如果大佬方便的话,能给这些语句在后面注释一下么?现在看来,我自己写的注释全部是错误的
小甲鱼最新课程 -> https://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. 你哪里不懂?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

BOCHS是配置DOS环境吗?有没有参考的配置文章,我今天尝试了半天也不行,这个只是个模拟器,还需要配置环境
小甲鱼最新课程 -> https://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这个是怎么计算出段内偏移地址的?
有好些这样的问题,没弄明白,学得一知半解的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

bochs 就是一个模拟器
要先在bochs中安装一个dos操作系统
好像并没有什么教程,这些东西要自己去探索
小甲鱼最新课程 -> https://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 这个标号的位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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