assembly - TSR服务程序汇编
问题描述
对裁定号 90H 给出了服务程序。在初始化标签之后,编写代码片段,将过程记录到中断向量并在 TSR 中结束程序。
jmp initialize
msg db "this is 2 times", 0ah ,0dh, '$'
isra90 proc
push ax
push dx
lea dx, cs:msg
mov ah, 09
int 21h
inc byte ptr msg+8
exist:
pop dx
pop ax
iret
Endp
该过程由一个程序触发,其中在数据段中定义了字符串:
味精数据库“你好$”
并且在代码段中出现命令 int 90H。
输出会是什么?为什么它不会是“这是 2 次”?否则它会打印“你好”?
解决方案
这个中断 90h 的中断服务程序不能打印消息“这是 2 次”。
当您的第二个程序运行int 90h
指令并因此调用处理程序时,存储在第一个程序(即 TSR 程序)中的消息需要通过DS:DX
指针进行寻址。情况并非如此,因为DS
段寄存器将指向属于第二个程序的数据。
接下来可以工作。它临时设置DS=CS
以便在 中获得正确的远指针DS:DX
。lea dx, cs:msg
由于暗示消息在代码段内的指令,我可以做出这个假设:
isra90 proc
push ax
push dx
PUSH DS
PUSH CS
POP DS
lea dx, cs:msg
mov ah, 09h
int 21h
inc byte ptr msg+8
exit:
POP DS
pop dx
pop ax
iret
Endp
中断 90h 的这个中断服务程序不能打印消息“hello”。
当您的第二个程序运行int 90h
指令并因此调用处理程序时,存储在第二个程序中的消息需要通过DS:DX
指针来寻址。情况并非如此,因为尽管DS
段寄存器可能会指向包含“hello”字符串的部分,但第一个程序中的msg标签值几乎肯定会与第二个程序中的msg标签值不同程序。
推荐阅读
- ignite - 更新了单独集群中的集群节点
- django - django 只允许在更新时向 m2m 字段添加新项目
- java - Android (PhoneGap) - 从推送通知中按钮的单击事件发送 HTTP 请求
- python - 当我更改优化器时,Tensorflow 内存不足
- scala - FlinkKafkaConsumer011 在 Flink 集群上未找到
- javascript - Firebase 函数承诺链未捕获错误
- terraform - 跨多个配置共享 Terraform 提供程序二进制文件
- c++ - cuda、设备、表达式必须是整数或枚举类型
- elasticsearch - 如何在 Kibana 数据可视化中使用 Bucket Selector?
- amazon-web-services - 当放置在 S3 存储桶中时,让 AWS Rekognition 读取图像的问题