• vscode编写:使用插件+DOSBox
    • 源程序组成
      • 汇编指令
      • 伪指令(其他):编译器使用,CPU不会执行
      • assume cs\ds:xxx :假设寄存器与段的关联
      • xxx segment xxx ends:成对使用伪指令,定义段,xxx为段名
      • 一个汇编程序由多个段组成(至少一个代码段)
      • end:汇编程序的结束标记,编译器识别后结束对源程序的编译
      • 标号:指代了一个地址,根据xxx(名称)
      • 程序返回:中断机制(消息机制)
        • mov ax,40cch
        • int 21h
    • shell将exe中的程序加载到内存
    • shell设置CPU的CS:IP执行程序的第一条指令
    • 程序运行结束,返回到shell,CPU继续运行shell

    image.png

    • 任务:编程运算2^3 ```cpp assume cs:abc abc segment ; start: mov ax,2 add ax,ax add ax,ax mov ax,4c00h int 21h

    abc ends end

    1. ```cpp
    2. data SEGMENT
    3. hello DB 'Hello World!$' ;注意要以$结束
    4. data ENDS
    5. code SEGMENT
    6. ASSUME CS:CODE,DS:DATA
    7. start:
    8. MOV AX,data ;将data首地址赋值给AX
    9. MOV DS,AX ;将AX赋值给DS,使DS指向data
    10. LEA DX,hello ;使DX指向hello首地址
    11. MOV AH,09h ;给AH设置参数09H
    12. INT 21h ;执行AH中设置的09H号功能。输出DS指向的DX指向的字符串hello
    13. MOV AX,4C00h ;给AH设置参数4C00h
    14. int 21h ;调用4C00h号功能,结束程序
    15. code ENDS
    16. END start
    • debug程序
      • 初始cx中存放的是程序的长度(字节)
      • 程序加载到内存的位置
        • 段寄存器的大小要*10才是起始地址(物理地址的形成)

    image.png

    • 用P执行int 21h