鱼C论坛

 找回密码
 立即注册
查看: 3253|回复: 3

[学习笔记] 《王爽汇编》实验15

[复制链接]
发表于 2018-6-5 19:00:31 | 显示全部楼层 |阅读模式

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

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

x
这一章内容稍微多了一点,所以多花了一些时间才看完。
但做题的思路依旧是比较畅快的~
有些地方不知道算不算是奇技淫巧了
感觉对编程这件事越来越上道了
  1. ;按下“A”键松开后,显示满屏幕的“A”,其他键照常处理。
  2. ;思路:1、断码
  3. ;      2、“A”需要状态键
  4. ;
  5. ;
  6. assume cs:code

  7. stack segment
  8.         db 128 dup (0)
  9. stack ends

  10. code segment
  11. start:        mov ax,stack
  12.                 mov ss,ax
  13.                 mov sp,128

  14.                 push cs
  15.                 pop ds

  16.                 mov ax,0
  17.                 mov es,ax

  18.                 mov si,offset int9
  19.                 mov di,204h
  20.                 mov cx,offset int9end-offset int9
  21.                 cld
  22.                 rep movsb

  23.                 push es:[9*4]
  24.                 pop es:[200h]
  25.                 push es:[9*4+2]
  26.                 pop es:[202h]

  27.                 cli
  28.                 mov word ptr es:[9*4],204h
  29.                 mov word ptr es:[9*4+2],0
  30.                 sti

  31.                 mov ax,4c00h
  32.                 int 21h

  33. int9:        push ax
  34.                 push bx
  35.                 push cx
  36.                 push es

  37.                 in al,60h

  38.                 pushf
  39.                 call dword ptr cs:[200h]

  40.                 cmp al,9Eh
  41.                 jne int9ret
  42.                 mov ax,40h
  43.                 mov es,ax
  44.                 mov al,es:[17h]
  45.                 and al,00000011b
  46.                 cmp al,0
  47.                 je int9ret

  48.                 mov ax,0b800h
  49.                 mov es,ax
  50.                 mov bx,0
  51.                 mov cx,2000
  52.                 mov al,41H
  53. s:                mov byte ptr es:[bx],al
  54.                 add bx,2
  55.                 loop s

  56. int9ret:        pop es
  57.                         pop cx
  58.                         pop bx
  59.                         pop ax
  60.                         iret

  61. int9end:nop

  62. code ends
  63. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-3 20:28:07 | 显示全部楼层
大佬~问一下哈,您的这一段是起什么作用的啊
                mov ax,40h
                mov es,ax
                mov al,es:[17h]
                and al,00000011b
                cmp al,0
                je int9ret
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-18 10:12:41 | 显示全部楼层
同问,我也没看懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-18 15:58:34 | 显示全部楼层
本帖最后由 sbx 于 2020-9-18 15:59 编辑

assume cs:code
stack segment
db 128 dup(0)
stack ends

code segment
start:mov ax,stack
mov ss,ax
mov sp,128

push cs
pop ds

mov ax,0
mov es,ax

mov si,offset int9                 ;设置ds:si指向源地址
mov di,204h                        ;设置ds:di指向目的地址
mov cx,offset int9end - offset int9;设置cx为传输长度

cld                                ;设置传输方向为正
rep movsb

push es:[9*4]                           
pop  es:[200h]
push es:[9*4+2]
pop es:[202h]                            ;将原来的int 9中断例程的入口地址保存在es:200、es:202单元中

cli
mov word ptr es:[9*4],204h               ;设置中断向量表
mov word ptr es:[9*4+2],0
sti

mov ax,4c00h
int 21h

int9:
push ax
push bx
push cx
push es

in al,60h                                ;将60端口的内容读入al中

pushf
push ax
mov ax,0
mov es,ax
pop ax
call dword ptr es:[200h]                 

cmp al,9eh
jne in9ret
mov ax,0b800h
mov es,ax
mov bl,'A'
mov cx,2000
mov di,0
s: mov es:[di],bl
add di,2
loop s

in9ret:
pop es
pop cx
pop bx
pop ax
iret

int9end:nop

code ends
end start
截图未命名13.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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