环境搭建 #
使用跨平台的 DOSbox 进行实操。
下载: DOSBox-0.74-3-3
文档: DOSBox-Manual
FreeDOS?
代码样例Caution
学习完成之后,使用 GBD 进行 32,64 bit 测试。
汇编多模块?reg desc remark cs:ip当前 cpu 执行指令的位置 只能通过跳转指令进行修改,而不能使用 movds:[*]ds:[200+bx]ds:200[bx]ds:[bx].200ds:[bx+si]、ds:[bx][si]ds:[bx+di]、ds:[bx][di]
…ds:[200+bx+si]ds:[bx+200+si]ds:200[bx][si]ds:[bx].200[si]ds:[bx][si].200内存取址的段地址和偏移地址 1、ds 只能通过寄存器转写,不能直接写入,而且一般结合 bx使用,在8086CPU中,只有这(bx,si,di,bp)4个寄存器可以用在“[…]”中来进行内存单元的寻址。
2、在[…]中,这4个寄存器可以单个出现,或只能以4种组合出现:bx 和si、bx 和di、bp 和si、bp 和di。
3、只要在[…]中使用寄存器 bp,而指令中没有显性地给出段地址,段地址就默认在 ss 中。[bx] 段地址在 ds: 中ss:sp栈顶的位置 入栈:高地址向低地址写入数据, sp=sp-(1|2)si,di变址寄存器(index),source, destination JMP跳转指令

jmp short 标号段内短转移:076C:0003 EB06 JMP 000Bjmp near ptr 标号段内近转移:076C:0003 E9DA04 JMP 04E0jmp far ptr 标号段内远转移:076C:0003 EB06 JMP 000B、076C:0003 EA0B016C07 JMP 076C:010B,同一个段内的话,和段内短转移一致。- 使用
assume cs:seg设置后可以与 cs 寄存器相作用,但是 ds 不会有效果(默认指向 PSP(Program Segment Prefix)段)。还需要在汇编中进行代码赋值设置。 - masm 对形如
mov ax, [0]类似的指令,把取址当立即数,需要注意。 - 每个段貌似是 16 Byte 对齐的。
- 搜索命令
s cs:0 l ffff <B8 01 00 BB 01 00...>.
8086 工具集 #
下载 8086.rar,直接解压到新建目录 8086 里面。
Trubo C 2.0 c语言开发环境搭建 #
从 页面 找到 download options 区域,选中 zip 格式 BorlandTurboC201-megapack.zip 下载 Trubo C 2.0 开发环境。直接解压就好了,里面包含 TC 目录就是,复制到 8086 里面,方便环境变量配置。
Trubo debugger 1.5 环境安装 #
在 这儿下载所需要的软盘文件(Turbo Debugger SN Y1F0111452 1988 Borland 3.5 720k gw27 F7Plus Disk1of1.rar)。解压后里面有三个文件 img、scp、txt。 将解压的文件及里面的三个文件重命名为TDB3_5,因为当前环境对文件名的限制。并在 DOSBox 的配置文件 ~/Library/Preferences/DOSBox\ 0.74-3-3\ Preferences 中通过命令
imgmount f /Users/stevenobelia/Documents/project_assembly_test/floppy/TDB3_5/TDB3_5.img -t floppy挂载。启动 DOSBox,切换到 f 盘,通过 dir 可以看到里面的内容。
执行 install.exe 可以出现安装界面。source drive 选择 f:,另外一个目的地,输入我们挂载的
e:\就行。之后选择Start Installation就行,可以看到软盘里面的内容被安装到了我们本地。其中 TDUTIL.ARC 是一个压缩包,正常使用
UNPACK.COM去解压,但是这个软盘里面没带,所以可以使用另一个叫unar的工具去解压。解压出来的内容包括TDUMP.EXE工具。

- 使用
Reference #
- https://www.eng.auburn.edu/~sylee/ee2220/8086_instruction_set.html 【8086/iAPX 86 指令集】 backup
- https://en.wikipedia.org/wiki/Intel_8086#Registers_and_instruction 【8086/iAPX 86 寄存器】
- https://en.wikibooks.org/wiki/X86_Assembly/16,_32,_and_64_Bits
- https://ee.usc.edu/~redekopp/cs356/slides/CS356Unit4_x86_ISA.pdf
- http://staff.ustc.edu.cn/~zhoudf/2014summer/debug.pdf 【debug 命令手册】
- http://cc.bjtu.edu.cn:81/meol/analytics/resPdfShow.do;jsessionid=2EB54504B8498E0EA5C816F038138104?resId=299730&lid=12290 【(trubo c debug) TD 使用手册】
- https://forum.winworldpc.com/discussion/13025/request-borland-turbo-debugger-1-5 【trubo debugger 1.5 软盘】 backup
- https://learn.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=msvc-170 【masm 语法】
- https://sourceware.org/gdb/current/onlinedocs/gdb 【gdb 手册】
- https://gitlab.com/tkchia/gcc-ia16
comments powered by Disqus