鱼C论坛

 找回密码
 立即注册
楼主: wyuri

王爽汇编问题

[复制链接]
 楼主| 发表于 2017-4-6 14:20:24 | 显示全部楼层
wyuri 发表于 2017-4-6 14:11
还是 不行,都操作过了,感觉是我程序的问题,可我就是找不出来哪里的问题,可能是我能力有限找的费劲, ...

这个是王爽汇编13章实验3,下面的程序是书上的,但是在编译器里根本没法编译,一直报错,我该怎么改动。
还有13章里的13.1问题答案,感觉小甲鱼的答案有些问你,应该是8000h吧?但他写的是FFFFh

assume cs:code

code segment

  s1:  db 'Good,better,best,','$'

  s2:  db 'Never let it rest,','$'

  s3:  db 'Till good is better,','$'

  s4:  db 'And better,best.','$'

  s :  dw offset s1,offset s2,offset s3,offset s4

  row: db 2,4,6,8



start:  mov ax,cs

        mov ds,ax

        mov bx,offset s

        mov si,offset row

        mov cx,4

ok:     mov bh,0      

        mov dh,[si]     

        mov dl,0        

        mov ah,2        

        int 10h



        mov dx,[bx]   

        mov ah,9      

        int 21h

        inc si         

        add bx,2      

        loop ok



        mov ax,4c00h

        int 21h

code ends

end start
QQ截图20170406141622.png
QQ截图20170406141955.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-6 15:07:58 | 显示全部楼层
人造人 发表于 2017-4-4 15:04
程序没有问题,关掉DOSBox 重新开一下试试

问题解决了,是我的程序问题,之所以第二个结果没问题纯属巧合,问题在装长度的寄存器没有归零。呵呵呵呵,谢谢 辛苦了.
然后还有个问题,就是第十三章13.1问题,小甲鱼给的答案可能有问题,不应该是8000h么?但小甲鱼写的是ffffh。
还有第十三章实验题3,程序不能被编译器识别,应该怎么改可以正常运行
assume cs:code

code segment

  s1:  db 'Good,better,best,','$'

  s2:  db 'Never let it rest,','$'

  s3:  db 'Till good is better,','$'

  s4:  db 'And better,best.','$'

  s :  dw offset s1,offset s2,offset s3,offset s4

  row: db 2,4,6,8



start:  mov ax,cs

        mov ds,ax

        mov bx,offset s

        mov si,offset row

        mov cx,4

ok:     mov bh,0        ;第0页

        mov dh,[si]     ;dh中放行号

        mov dl,0        ;dl中放列号

        mov ah,2        ;置光标

        int 10h



        mov dx,[bx]     ;ds:dx指向字符串首地址

        mov ah,9        ;在光标位置显示字符

        int 21h

        inc si          ;行号递增

        add bx,2        ;指向下一字符串

        loop ok



        mov ax,4c00h

        int 21h

code ends

end start
QQ截图20170406141955.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-6 15:14:04 | 显示全部楼层
人造人 发表于 2017-4-4 15:04
程序没有问题,关掉DOSBox 重新开一下试试

OK了解决了,是我程序的问题,我没有把装长度的寄存器归零,^_^
还有个问题就是第十三章13.1问题,最大范围应该是8000h吧?但小甲鱼写的是ffffh。
还有第十三章实验3,程序没有办法通过编译器,我应该怎么更改能通过编译器
assume cs:code

code segment

  s1:  db 'Good,better,best,','$'

  s2:  db 'Never let it rest,','$'

  s3:  db 'Till good is better,','$'

  s4:  db 'And better,best.','$'

  s :  dw offset s1,offset s2,offset s3,offset s4

  row: db 2,4,6,8



start:  mov ax,cs

        mov ds,ax

        mov bx,offset s

        mov si,offset row

        mov cx,4

ok:     mov bh,0        ;第0页

        mov dh,[si]     ;dh中放行号

        mov dl,0        ;dl中放列号

        mov ah,2        ;置光标

        int 10h



        mov dx,[bx]     ;ds:dx指向字符串首地址

        mov ah,9        ;在光标位置显示字符

        int 21h

        inc si          ;行号递增

        add bx,2        ;指向下一字符串

        loop ok



        mov ax,4c00h

        int 21h

code ends

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

使用道具 举报

发表于 2017-4-6 16:57:01 | 显示全部楼层
去掉冒号

  1. assume cs:code

  2. code segment

  3.   s1  db 'Good,better,best,','

  4.   s2  db 'Never let it rest,','

  5.   s3  db 'Till good is better,','

  6.   s4  db 'And better,best.','

  7.   s  dw offset s1,offset s2,offset s3,offset s4

  8.   row db 2,4,6,8



  9. start:  mov ax,cs

  10.         mov ds,ax

  11.         mov bx,offset s

  12.         mov si,offset row

  13.         mov cx,4

  14. ok:     mov bh,0        ;第0页

  15.         mov dh,[si]     ;dh中放行号

  16.         mov dl,0        ;dl中放列号

  17.         mov ah,2        ;置光标

  18.         int 10h



  19.         mov dx,[bx]     ;ds:dx指向字符串首地址

  20.         mov ah,9        ;在光标位置显示字符

  21.         int 21h

  22.         inc si          ;行号递增

  23.         add bx,2        ;指向下一字符串

  24.         loop ok



  25.         mov ax,4c00h

  26.         int 21h

  27. code ends

  28. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 20:00:50 | 显示全部楼层
人造人 发表于 2017-4-4 12:50
debug 可以修改位于堆栈上的单步中断标志

目前你可以这样理解,事实上不是这样的,你学到后面就会明白 ...

你好我有十五章的15.1检测点不懂
QQ图片20170408195459副本.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 20:31:05 | 显示全部楼层
wyuri 发表于 2017-4-8 20:00
你好我有十五章的15.1检测点不懂

当有程序执行 int 9
这条指令时,进入中断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 10:03:05 | 显示全部楼层
人造人 发表于 2017-4-8 20:31
当有程序执行 int 9
这条指令时,进入中断

不太懂,怎么进去的,操作什么了就进int9了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 10:27:35 | 显示全部楼层
人造人 发表于 2017-4-8 20:31
当有程序执行 int 9
这条指令时,进入中断

什么时候进的中断历程,干什么了就进中断历程了,完全没看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 10:31:54 | 显示全部楼层
人造人 发表于 2017-4-8 20:31
当有程序执行 int 9
这条指令时,进入中断

我想知道  是怎么判断进中断例程的,是因为  in al,60h这个指令,判断进中断例程的么?完全蒙如果这个不弄明白以后不都不知道怎么模仿int指令编程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 10:37:48 | 显示全部楼层
人造人 发表于 2017-4-8 20:31
当有程序执行 int 9
这条指令时,进入中断

这题没问明白我都不敢问下两到题,怕把这题忘了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 11:28:33 | 显示全部楼层
人造人 发表于 2017-4-8 20:31
当有程序执行 int 9
这条指令时,进入中断

王爽汇编第十五章实在不明白读了好几遍书,就是搞不清楚
问题20.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 11:47:59 | 显示全部楼层
wyuri 发表于 2017-4-10 10:27
什么时候进的中断历程,干什么了就进中断历程了,完全没看懂

int 9 是键盘中断

当键盘上有按键按下的时候进入中断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 11:56:43 | 显示全部楼层
wyuri 发表于 2017-4-10 11:28
王爽汇编第十五章实在不明白读了好几遍书,就是搞不清楚

in al, 60h
用in, out 指令直接读写端口
在这里,用in 指令从60h端口读一个字节到al寄存器
60h端口是 8042键盘控制器

  1. 端口地址范围                     分配说明
  2. 0x000-0x01f                       8237A DMA控制器1
  3. 0x020-0x03f                       8259A 可编程中断控制器1
  4. 0x040-0x05f                       8253/8254|A 定时计数器
  5. 0x060-0x06f                       8042键盘控制器
  6. 0x070-0x07f                       访问CMOS RAM/实时时钟RTC(Real Time Clock)端口
  7. 0x080-0x09f                       DMA页面寄存器访问端口
  8. 0x0a0-0x0bf                       8259 可编程中断控制器2
  9. 0x0c0-0x0df                       8237A DMA控制器2
  10. 0x0f0-0x0ff                         协处理器访问端口
  11. 0x170-0x177                       IDE硬盘控制器1
  12. 0x1f0-0x1f7                        IDE硬盘控制器2
  13. 0x278-ox27f                       并行打印机端口2
  14. 0x2f8-0x2ff                         串行控制器2
  15. 0x378-0x38f                       并行打印机端口1
  16. 0x3b0-0x3bf                       单色MDA显示控制器
  17. 0x3c0-0x3cf                        彩色CGA显示控制器
  18. 0x3d0-0x3df                       彩色EGA/VGA显示控制器
  19. 0x3f0-0x3f7                        软盘控制器
  20. 0x3f8-0x3ff                        串行控制器1
  21. 000-00F 8237 DMA controller:

  22. 000 Channel 0 address register
  23. 001 Channel 0 word count
  24. 002 Channel 1 address register
  25. 003 Channel 1 word count
  26. 004 Channel 2 address register
  27. 005 Channel 2 word count
  28. 006 Channel 3 address register
  29. 007 Channel 3 word count
  30. 008 Status/command register
  31. 009 Request register
  32. 00A Mask register
  33. 00B Mode register
  34. 00C Clear MSB/LSB flip flop
  35. 00D Master clear temp register
  36. 00E Clear mask register
  37. 00F Multiple mask register

  38. 010-01F 8237 DMA Controller (PS2 model 60 & 80), reserved (AT)

  39. 020-02F 8259A Master Programmable Interrupt Controller:

  40. 020 8259 Command port (see 8259)
  41. 021 8259 Interrupt mask register (see 8259)

  42. 030-03F 8259A Slave Programmable Interrupt Controller (AT,PS2)

  43. 040-05F 8253 or 8254 Programmable Interval Timer:

  44. 040 8253 channel 0, counter divisor
  45. 041 8253 channel 1, RAM refresh counter
  46. 042 8253 channel 2, Cassette and speaker functions
  47. 043 8253 mode control (see 8253)
  48. 044 8254 PS/2 extended timer
  49. 047 8254 Channel 3 control byte

  50. 060-067 8255 Programmalbe Peripheral Interface (PC,XT,PCjr):

  51. 060 8255 Port A keyboard input/output buffer (output PCjr)
  52. 061 8255 Port B output
  53. 062 8255 Port C input
  54. 063 8255 Command/Mode control register

  55. 060-06f 8042 Keyboard Controller (AT,PS2):

  56. 060 8042 Keyboard input/output buffer register
  57. 061 8042 system control port (for compatability with 8255)
  58. 064 8042 Keyboard command/status register

  59. 070 CMOS RAM/RTC, also NMI enable/disable (AT,PS2, see RTC)
  60. 071 CMOS RAM data (AT,PS2)

  61. 080 Manufacturer checkpoint port
  62. 080-090 DMA Page Registers:

  63. 081 High order 4 bits of DMA channel 2 address
  64. 082 High order 4 bits of DMA channel 3 address
  65. 083 High order 4 bits of DMA channel 1 address

  66. 090-097 POS/Programmable Option Select (PS2):

  67. 090 Central arbitration control Port
  68. 091 Card selection feedback
  69. 092 System control and status register
  70. 094 System board enable/setup register
  71. 095 Reserved
  72. 096 Adapter enable/setup register
  73. 097 Reserved

  74. 0A0 NMI Mask Register (PC,XT) (write 80h to enable NMI, 00h disable)
  75. 0A0-0BF Second 8259 Programmalbe Interrupt Controller (AT,PS2):

  76. 0A0 Second 8259 Command port (see 8259)
  77. 0A1 Second 8259 Interrupt mask register (see 8259)

  78. 0C0 TI SN76496 Programmable Tone/Noise Generator (PCjr)
  79. 0C0-0DF 8237 DMA Controller 2 (AT):

  80. 0C2 DMA channel 3 selector (see ports 6 & 82)

  81. 0E0-0EF Reserved

  82. 0F0-0FF Math Coprocessor (AT,PS2)
  83. 0F0-0F5 PCjr Disk Controller:

  84. 0F0 Disk Controller
  85. 0F2 Disk Controller control port
  86. 0F4 Disk Controller status register
  87. 0F5 Disk Controller data port

  88. 0F8-0FF Reserved for future microprocessor extensions

  89. 100-10F POS Programmable Option Select (PS2):

  90. 100 POS Register 0, Adapter ID byte (LSB)
  91. 101 POS Register 1, Adapter ID byte (MSB)
  92. 102 POS Register 2, Option select data byte 1
  93.         Bit 0 is card enable (CDEN)
  94. 103 POS Register 3, Option select data byte 2
  95. 104 POS Register 4, Option select data byte 3
  96. 105 POS Register 5, Option select data byte 4
  97.         Bit 7 is (-CHCK)
  98.         Bit 6 is reserved
  99. 106 POS Register 6, subaddress extension (LSB)
  100. 107 POS Register 7, subaddress extension (MSB)

  101. 110-1EF System I/O channel

  102. 170-17F Fixed disk 1 (AT):

  103. 170 disk 1 data
  104. 171 disk 1 error
  105. 172 disk 1 sector count
  106. 173 disk 1 sector number
  107. 174 disk 1 cylinder low
  108. 175 disk 1 cylinder high
  109. 176 disk 1 drive/head
  110. 177 disk 1 status

  111. 1F0-1FF Fixed disk 0 (AT):

  112. 1F0 disk 0 data
  113. 1F1 disk 0 error
  114. 1F2 disk 0 sector count
  115. 1F3 disk 0 sector number
  116. 1F4 disk 0 cylinder low
  117. 1F5 disk 0 cylinder high
  118. 1F6 disk 0 drive/head
  119. 1F7 disk 0 status

  120. 200-20F Game Adapter

  121. 210-217 Expansion Card Ports (XT):

  122. 210 Write: latch expansion bus data
  123.     read: verify expansion bus data
  124. 211 Write: clear wait,test latch
  125.     Read: MSB of data address
  126. 212 Read: LSB of data address
  127. 213 Write: 0=enable, 1=/disable expansion unit
  128. 214-215 Receiver Card Ports
  129. 214 write: latch data, read: data
  130. 215 read: MSB of address, next read: LSB of address

  131. 21F Reserved

  132. 220-26F Reserved for I/O channel

  133. 270-27F Third parallel port (see PARALLEL PORT):

  134. 278 data port
  135. 279 status port
  136. 27A control port

  137. 280-2AF Reserved for I/O channel

  138. 2A2-2A3 MSM58321RS clock

  139. 2B0-2DF Alternate EGA, or 3270 PC video (XT, AT)

  140. 2E0 Alternate EGA/VGA

  141. E1 GPIB Adapter (AT)

  142. 2E2-2E3 Data acquisition adapter (AT)

  143. 2E8-2EF COM4 non PS2 UART (Reserved by IBM) (see UART)

  144. 2F0-2F7 Reserved

  145. 2F8-2FF COM2 Second Asynchronous Adapter
  146. Primary Asynchronous Adapter for PCjr

  147. 300-31F Prototype Experimentation Card
  148. Periscope hardware debugger

  149. 320-32F Hard Disk Controller (XT):

  150. 320 Read from/Write to controller
  151. 321 Read: Controller Status, Write: controller reset
  152. 322 Write: generate controller select pulse
  153. 323 Write: Pattern to DMA and interrupt mask register
  154. 324 disk attention/status

  155. 330-33F Reserved for XT/370

  156. 340-35F Reserved for I/O channel

  157. 360-36F PC Network

  158. 370-377 Floppy disk controller (except PCjr):

  159. 372 Diskette digital output
  160. 374 Diskette controller status
  161. 375 Diskette controller data
  162. 376 Diskette controller data
  163. 377 Diskette digital input

  164. 378-37F Second Parallel Printer (see PARALLEL PORT):

  165. 378 data port
  166. 379 status port
  167. 37A control port

  168. 380-38F Secondary Binary Synchronous Data Link Control (SDLC) adapter:

  169. 380 On board 8255 port A, internal/external sense
  170. 381 On board 8255 port B, external modem interface
  171. 382 On board 8255 port C, internal control and gating
  172. 383 On board 8255 mode register
  173. 384 On board 8253 channel square wave generator
  174. 385 On board 8253 channel 1 inactivity time-out
  175. 386 On board 8253 channel 2 inactivity time-out
  176. 387 On board 8253 mode register
  177. 388 On board 8273 read: status; Write: Command
  178. 389 On board 8273 write: parameter; read: response
  179. 38A On board 8273 transmit interrupt status
  180. 38B On board 8273 receiver interrupt status
  181. 38C On board 8273 data

  182. 390-39F Cluster Adapter

  183. 3A0-3AF Primary Binary Synchronous Data Link Control (SDLC) adapter:

  184. 3A0 On board 8255 port A, internal/external sense
  185. 3A1 On board 8255 port B, external modem interface
  186. 3A2 On board 8255 port C, internal control and gating
  187. 3A3 On board 8255 mode register
  188. 3A4 On board 8253 counter 0 unused
  189. 3A5 On board 8253 counter 1 inactivity time-outs
  190. 3A6 On board 8253 counter 2 inactivity time-outs
  191. 3A7 On board 8253 mode register
  192. 3A8 On board 8251 data
  193. 3A9 On board 8251 command/mode/status register

  194. 3B0-3BF Monochrome Display Adapter (write only, see 6845):

  195. 3B0 port address decodes to 3B4
  196. 3B1 port address decodes to 3B5
  197. 3B2 port address decodes to 3B4
  198. 3B3 port address decodes to 3B5
  199. 3B4 6845 index register, selects which register [0-11h]
  200.     is to be accessed through port 3B5
  201. 3B5 6845 data register [0-11h] selected by port 3B4,
  202.     registers 0C-0F may be read. If a read occurs without
  203.     the adapter installed, FFh is returned. (see 6845)
  204. 3B6 port address decodes to 3B4
  205. 3B7 port address decodes to 3B5
  206. 3B8 6845 Mode control register
  207. 3B9 reserved for color select register on color adapter
  208. 3BA status register (read only)
  209. 3BB reserved for light pen strobe reset

  210. 3BC-3BF Primary Parallel Printer Adapter (see PARALLEL PORT):

  211. 3BC parallel 1, data port
  212. 3BD parallel 1, status port
  213. 3BE parallel 1, control port

  214. 3C0-3CF EGA/VGA:

  215. 3C0 VGA attribute and sequencer register
  216. 3C1 Other video attributes
  217. 3C2 EGA, VGA, CGA input status 0
  218. 3C3 Video subsystem enable
  219. 3C4 CGA, EGA, VGA sequencer index
  220. 3C5 CGA, EGA, VGA sequencer
  221. 3C6 VGA video DAC PEL mask
  222. 3C7 VGA video DAC state
  223. 3C8 VGA video DAC PEL address
  224. 3C9 VGA video DAC
  225. 3CA VGA graphics 2 position
  226. 3CC VGA graphics 1 position
  227. 3CD VGA feature control
  228. 3CE VGA graphics index
  229. 3CF Other VGA graphics

  230. 3D0-3DF Color Graphics Monitor Adapter (ports 3D0-3DB are write only, see 6845):

  231. 3D0 port address decodes to 3D4
  232. 3D1 port address decodes to 3D5
  233. 3D2 port address decodes to 3D4
  234. 3D3 port address decodes to 3D5
  235. 3D4 6845 index register, selects which register [0-11h]
  236.     is to be accessed through port 3D5
  237. 3D5 6845 data register [0-11h] selected by port 3D4,
  238.     registers 0C-0F may be read. If a read occurs without
  239.     the adapter installed, FFh is returned. (see 6845)
  240. 3D6 port address decodes to 3D4
  241. 3D7 port address decodes to 3D5
  242. 3D8 6845 Mode control register (CGA, EGA, VGA, except PCjr)
  243. 3D9 color select palette register (CGA, EGA, VGA, see 6845)
  244. 3DA status register (read only, see 6845, PCjr VGA access)
  245. 3DB Clear light pen latch (any write)
  246. 3DC Preset Light pen latch
  247. 3DF CRT/CPU page register (PCjr only)

  248. 3E8-3EF COM3 non PS2 UART (Reserved by IBM) (see UART)

  249. 3F0-3F7 Floppy disk controller (except PCjr):

  250. 3F0 Diskette controller status A
  251. 3F1 Diskette controller status B
  252. 3F2 controller control port
  253. 3F4 controller status register
  254. 3F5 data register (write 1-9 byte command, see INT 13)
  255. 3F6 Diskette controller data
  256. 3F7 Diskette digital input

  257. 3F8-3FF COM1 Primary Asynchronous Adapter (see UART)3F0 Diskette controller status A:

  258. 3220-3227 PS2 COM3
  259. 3228-322F PS2 COM4
  260. 4220-4227 PS2 COM5
  261. 4228-422F PS2 COM6
  262. 5220-5227 PS2 COM7
  263. 5228-522F PS2 COM8
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 14:16:56 | 显示全部楼层
人造人 发表于 2017-3-27 13:39
第8行,没有问题

顺便说一下

这样我问您一个最主要的问题,然后我会了这个很多东西我就可以看结果自己去调试就省着没必要的总问您。
就是你是怎么让cmd显示程序的,我研究了好久不会弄,您能告诉我详细步骤么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 14:37:38 | 显示全部楼层
人造人 发表于 2017-3-27 13:39
第8行,没有问题

顺便说一下

我的程序是这个样子的,我不知道怎么显示
QQ截图20170410143551.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 23:18:28 | 显示全部楼层
wyuri 发表于 2017-4-10 14:37
我的程序是这个样子的,我不知道怎么显示

装一个虚拟机,在xp下玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 11:34:20 | 显示全部楼层
人造人 发表于 2017-4-10 11:56
in al, 60h
用in, out 指令直接读写端口
在这里,用in 指令从60h端口读一个字节到al寄存器

王爽汇编第五章int9例程,push 和pop的顺序不样程序怎样正确运行,为什么就可以不设置if 和tf等于0完全不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 11:40:56 | 显示全部楼层
wyuri 发表于 2017-4-11 11:34
王爽汇编第五章int9例程,push 和pop的顺序不样程序怎样正确运行,为什么就可以不设置if 和tf等于0完全不 ...

在进入中断后 if和tf 已经硬件置0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 11:52:22 | 显示全部楼层
本帖最后由 wyuri 于 2017-4-11 11:54 编辑
人造人 发表于 2017-4-10 23:18
装一个虚拟机,在xp下玩


还有是先push 寄存器之后模拟的,然后又先pop寄存器后iret
push ax / push bx / push es /in al,60h/ pushf/call dword ptr ds:[0]/这是先寄存器入栈后cs ip入栈
pop es/pop bx/pop ax/iret/而又是先寄存器出栈后csip出栈
明显出栈顺序错误,我想知道程序怎么正确运行
这个问题我在上面有图片可能您没看到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 12:27:04 | 显示全部楼层
人造人 发表于 2017-4-11 11:40
在进入中断后 if和tf 已经硬件置0了

你的意思是说只要我按键盘上的按键就产生中断了,然后就设置iftf为0 了是么?
书上是这样写的第十五章:键盘输入到达 60h 端口后,就会引发 9 号中断,CPU 则转去执行 int 9 中断例程。
书上还说第十三章:int 指令的格式为:int n, n为中断类型码, 它的功能是引发中断过程。
CPU 执行 int n 指令,相当于引发一个 n 号中断的中断过程,执行过程如下。
(1)  取中断类型码 n; (2) 标志寄存器入栈 , IF=0, TF=0;   (3)  CS , IP入栈; (4) (IP)=(n*4), (CS)=(n*4+2).
这是书上所写
那么先在我们是模拟 int 9 例程,按书上的说只有 int 9 的过程里有if tf为0,那为什么我们要把它却掉,硬生生的说已经设置为0了,怎么就设置了?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 10:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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