📓 Archive

  • Pricing
  • Billiards
  • Chess
  • Syntax
  • BOOK

    Create:2026/02/23 dc90079 Update:2026-05-19

    • 环境搭建 #

      使用跨平台的 DOSbox 进行实操。
      下载: DOSBox-0.74-3-3 
      文档: DOSBox-Manual

      FreeDOS?

      代码样例

      # 编译
      1、masm demo.asm;
      2、nasm demo.asm -f obj -o nasm.obj
      
      ➜  demo objconv -h
      
      Object file converter version 2.56 for x86 and x86-64 platforms.
      Copyright (c) 2025 by Agner Fog. Gnu General Public License.
      
      Usage: objconv options inputfile [outputfile]
      
      Options:
      -fXXX[SS]  Output file format XXX, word size SS. Supported formats:
              PE, COFF, ELF, OMF, MACHO
      
      -fasm      Disassemble file (-fmasm, -fnasm, -fyasm, -fgasm)
      
      -dXXX      Dump file contents to console.
              Values of XXX (can be combined):
              f: File header, h: section Headers, s: Symbol table,
              r: Relocation table, n: string table.
      

      Caution

      学习完成之后,使用 GBD 进行 32,64 bit 测试。
      汇编多模块?

      regdescremark
      cs:ip当前 cpu 执行指令的位置只能通过跳转指令进行修改,而不能使用mov
      ds:[*]
      ds:[200+bx]
      ds:200[bx]
      ds:[bx].200
      ds:[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 000B
      jmp near ptr 标号 段内近转移:076C:0003 E9DA04 JMP 04E0
      jmp far ptr 标号 段内远转移:076C:0003 EB06 JMP 000B076C:0003 EA0B016C07 JMP 076C:010B,同一个段内的话,和段内短转移一致。

      1. 使用 assume cs:seg 设置后可以与 cs 寄存器相作用,但是 ds 不会有效果(默认指向 PSP(Program Segment Prefix)段)。还需要在汇编中进行代码赋值设置。
      2. masm 对形如mov ax, [0]类似的指令,把取址当立即数,需要注意。
      3. 每个段貌似是 16 Byte 对齐的。
      4. 搜索命令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 #


    comments powered by Disqus