80x86汇编编程-1
看清x86指令从机器码到CPU执行的每一步细节
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
80x86汇编编程-1
看清x86指令从机器码到CPU执行的每一步细节
hello world-1
80x86汇编的寄存器、段机制你都见过了。现在拿最简单的程序——Hello World——下手,看清每一行汇编背后,系统到底做了什么。
排队号 AH 决定办什么业务,材料袋 DS:DX 交给窗口,按铃 INT 21H 触发柜员处理
汇编指示-1
上一段 hello world 里我们写过 .data、.code、end——这些词 CPU 根本不认。那它们怎么会出现在汇编程序里?汇编器为什么要处理它们?
CPU 是工人只认操作指令;汇编器才是包工头,看得懂施工单上的安排
汇编指示-2
上一页用 DB、DW、DD 把数据塞进内存。但程序不只是数据的堆砌——还要给数字起名、给代码分段、把重复逻辑封成子过程。这一页的指示符,给程序搭骨架。
DB/DW/DD 是往屋里搬家具;EQU 贴标签、SEGMENT 划房间、PROC 圈功能区——骨架先于家具
hello world-2
上一页搭好了数据段和代码段的脚手架——但 CPU 不会自己发光。要把"Hello, world!"推到屏幕上,必须让程序和 DOS 协同工作。这一页拆解这段协作的内部机制。
分诊台(AH)决定去哪个科,病历本(DX)带着资料,护士(DOS)按流程办事
C程序的内存布局
C程序的内存布局:定义、要点与典型应用
第一个汇编编程程序-1
写过 C 程序的都知道,main() 写完,编译器会自动补上入口与退出;但汇编里——段在哪、入口标在哪、怎么把控制权交还 OS,全都得自己声明。少写一行,程序就启动不了。
C 是精装房拎包入住;汇编连水电、墙面、家具都得自己安排
第一个汇编编程程序-2
上一页我们写出了 hello world 程序。但程序怎么从 .asm 变成 .exe?为什么必须有那三段?退出时 4Ch 究竟把控制权交给谁?这一页钻进去——从源码到运行的完整链条。
汇编把每段翻译成零件(.obj),链接按段名把零件拼成整机(.exe)
系统调用
上一篇我们写出了第一个汇编程序,看到屏幕上有输出。可"程序怎么让字符显示在屏幕上"背后,靠的就是系统调用——用户程序与操作系统打交道的唯一正门。
储户(用户程序)不能进金库(内核),必须经柜台(系统调用)填单子(参数),由柜员代为操作
汇编编程示例-处理命令行
汇编编程示例-处理命令行参数:定义、要点与典型应用
汇编编程示例-调用libc库
上页我们用 sys_write 直接和内核对话——但每个字符串都要算长度、每个数字都要手动转成 ASCII。本页看更方便的做法:让汇编程序直接调用 libc 的 printf,省掉这些麻烦。
自己做饭(sys_write)要洗切炒(缓冲、格式化),盒饭装好(libc 全包),不用管厨师换了谁(内核变动)
汇编编程小结
调用 printf 后屏幕上跳出字符串——这背后是汇编直接 syscall 进内核、或借 libc 包装这两条路。练到这里,是时候把汇编编程的'全貌'收成一张地图了。
高语言像自动挡只管油门;汇编每步自己踩离合挂挡,效率上限更高,也能做自动挡做不了的动作
补充-算术操作指令
前面的示例只打印字符串,真正能算的程序还得靠算术指令。C 里 a+b 是一句话,汇编里你得选指令、选大小、还要知道结果落在哪个寄存器。本页补齐这一块。
加减直接擦掉原值写新值;乘除把两数塞进固定机器,出料口固定在 AX/DX
汇编编程示例-过程调用-1
汇编编程示例-过程调用-1:定义、要点与典型应用
汇编编程示例-过程调用-2
上一页我们看到 CALL 把返回地址压栈、RET 再弹出。但真实的过程不是真空函数——它要接收参数、申请临时变量,还要保证不破坏调用者的寄存器。这一页深入栈帧的完整结构。
EBP 像固定登记本,每次进函数在栈上新开一层临时工位,用完弹出恢复
本节要点
- ✓程序最终要落成机器指令,并由链接器组织为可执行文件
- ✓数据、代码与栈各司其职,访问前先确认所在区段
- ✓系统调用是用户态进入内核的受控接口
- ✓过程调用依赖返回地址、栈帧与寄存器约定衔接
- ✓算术操作会更新状态标志,条件跳转据此改变流程
课后思考
三个问题,先独立思考再看答案。可以跳序、不必都答。
参考答案这是用户态和内核态之间的 ABI(应用二进制接口)。一旦约定,操作系统和工具链都不能轻易改,否则旧二进制全部失效——这就是向后兼容的代价。
参考答案指令上都是 call/ret;区别在于库函数在可执行文件外部,链接器把 libc 等的实现拉进来并完成符号地址重定位。
参考答案汇编:程序员掌控一切,但一个小错就段错误;高级语言:运行时帮你检查,但有性能开销和可被绕过的攻击面。两种哲学在不同场景各有合理性。