当前位置: 首页 > news >正文

天津滨海新区落户政策百度seo公司兴田德润

天津滨海新区落户政策,百度seo公司兴田德润,wordpress安装二级目录下,找外包网站 和自己做续:将基于Nasm汇编的打字小游戏,移植到DOSBox 文章目录 续:将基于Nasm汇编的打字小游戏,移植到DOSBox前情提要细说1 编译2 程序入口3 定位段 运行体验 前情提要 上一篇:【编程实践】黑框框里的打字小游戏,但…

续:将基于Nasm汇编的打字小游戏,移植到DOSBox

文章目录

  • 续:将基于Nasm汇编的打字小游戏,移植到DOSBox
  • 前情提要
  • 细说
    • 1 编译
    • 2 程序入口
    • 3 定位段
  • 运行体验

前情提要

上一篇:【编程实践】黑框框里的打字小游戏,但是汇编语言-CSDN博客

在上一篇文章中我对这个小程序进行了介绍,但由于运行环境的安装比较复杂,估计没有谁会将我的代码跑起来,可那样实在是太遗憾了。学习过汇编语言的你大概率是使用过DOSBox的,为此我献祭了2小时的宝贵生命,成功地将代码在DOS上跑起来了。

如果对具体移植过程不感兴趣,可以直接跳到运行体验部分。

细说

上文的虚拟机环境和DOSBox都支持8086汇编,就换个地方运行能遇到什么麻烦?麻烦就是多了DOS操作系统的存在,现在我不需要自己编程从磁盘加载用户程序的引导程序了,这个事情换由DOS操作系统来做,可是我不太明白DOS需要我提供什么。

1 编译

首先我尝试着将曾经编译的typing.bin直接在DOSBox中运行,期待它能识别出我代码里的头部信息,正常地加载我的代码并将cpu的控制权交出来。然而它并不认.bin后缀的程序:Illegal command: typing.bin。于是我搜索到了一篇博客,并欣喜地发现它的代码是可以正常运行的。

参考:DOSBox下编译和运行NASM代码_nasm dosbox-CSDN博客

原来是需要编译成.com文件

> nasm -f bin typing.asm -o typing.com # 在本机命令行窗口中
> typing.com						 # 在DOSBox中

2 程序入口

DOS系统如何知道我的程序从哪里开始执行呢?毕竟我源代码中起始是一个头部段而不是代码段。答案是它什么也不知道,只会从源代码的第一行开始执行,所以我在源码的开头添加了一条跳转指令:

org 0x0100                      ;DOS系统会创建一个PSP数据区
jmp section.code.start

org 0x0100是什么?可以参考下面另一个博主的文章。它是在编译阶段发挥作用的伪指令,简单点说就是让标号能够获取到正确的偏移地址。引用标号时本来是获取标号所在处的汇编地址(与程序开头的相对地址),程序第一条指令的汇编地址是0,但被DOS加载后程序第一条指令的偏移地址就变成了0x0100,因为前面256个字节被PSP占据。而org 0x0100会让你在引用标号时自动加上0x0100

补充:如果在段中指定了vstart=0,那么段内的标号被引用时仍然是段内偏移地址,而不会加上0x0100

此时逻辑地址cs:0000指向的是PSP,cs:0100指向的才是程序第一条指令。不过org 0x0100是为后面定位代码段和数据段服务的,写与不写都对依据位移的jmp指令没有影响。

参考:NASM的ORG 0100h的实际含义_org 0100h指令是什么意思-CSDN博客

下面这张图可能更加直观一点:

在这里插入图片描述

3 定位段

3.1 定位数据段

这件事情在Nasm中要比Masm麻烦,因为Masm可以直接获取一个段的段地址,而Nasm中的section.段名.start只能获取到段的汇编地址。我想让数据段寄存器ds指向数据段,还需要将获取的汇编地址除以4,才得到段地址。这里的除操作可以使用右移位指令shr替代。

;1 将ds指向数据段;
mov ax, section.data.start
shr ax, 4mov bx, cs 
add ax, bx 
mov ds, ax 

3.2 定位代码段

因为在程序开头使用了jmp指令,即便不将cs定位到代码段,大部分代码也可以正常执行,除了键盘中断例程。中断例程的代码逻辑当然没有什么问题,毕竟之前都能正常运行,只是中断向量表的填写出问题了,问题代码片段如下:

cli
mov word [9*4], int9_new
mov word [9*4+2], cs
sti  

回想一下,标号int9_new是个代码段的段内偏移地址,可cs指向的都不是代码段,这能从中断向量表找到中断例程才怪。定位代码段的操作与前面定位数据段类似,但必须同时更改cs和ip寄存器,因为cs:ip永远指向运行的下一条指令的地址。

;2 将cs指向代码段, 并将ip指向程序的正式开始:start标号
mov ax, section.code.start 
shr ax, 4mov bx, cs 
add ax, bx 
mov free[2], ax
mov word free[0], start 
jmp far [free]

运行体验

Gitee获取代码:清风莫追/Typing_asm (gitee.com)

我在代码仓库的dos文件夹中,已经提供了编译好的程序typing.com,如果你已经安装了DOSBox的话,那么可以直接运行它了!

在这里插入图片描述


http://www.tj-hxxt.cn/news/104231.html

相关文章:

  • 官网排名优化seo网站优化方
  • 网站建设合作方案宁波抖音seo搜索优化软件
  • dz网站收款即时到账怎么做的如何在手机上开自己的网站
  • 网站二次开发没人做微信朋友圈广告代理
  • 电子商务网站建设的开发方案网络营销的专业知识
  • 设计公司企业文化湖南网站seo公司
  • 电子商务网站建设课后作业百度免费推广方法
  • seo网站关键词优化怎么做网络营销有哪几种方式
  • 设计网站页面设计seo分析师
  • wordpress访问源端口号网站推广优化的方法
  • wordpress 网站制作网络营销的平台有哪些
  • 武汉企业做网站找哪家好今日网站收录查询
  • 网站备案幕布怎么做汕头疫情最新消息
  • 资阳房地产网站建设百度seo哪家公司好
  • 网站设计的特点必应搜索引擎网址
  • 电子商务网站策划方案南京百度推广优化排名
  • 建设派网站深圳网站seo公司
  • 手机网站用什么制作爱站网官网查询域名
  • 昆明旅游网站建设数字营销成功案例
  • 天津企业建网站关键词seo深圳
  • 学校网站怎么建设百度明星人气榜
  • 网页设计视频网站建设房地产新闻最新消息
  • 网站上线 邮件群发模板百度seo排名点击器app
  • java做博客网站百度推广竞价排名技巧
  • 湛江做网站深圳龙岗区疫情最新消息
  • 上海网站建设公司排行app推广拉新接单平台
  • 网站自身seo优化怎么做网站站长工具
  • 做外汇的官方网站百度关键词排名怎么靠前
  • 服务行业网站建设软文广告经典案例
  • 廊坊网站建设策划企业网络营销推广方案策划范文