1、冯诺依曼计算机的五大部件:运算器、控制器、存储器、输入设备、输出设备演变为3个硬件子系统:处理器、存储系统和输入输出系统。 对汇编语言程序员来说,处理器、存储器和外部设备依次被抽象为寄存器、存储器地址和输入输出地址。 2、机器指令是二进制编码表示的,处理器不需翻译就能识别,缺点就是很难理解,容易出错。采用便于记忆并且能描述指令功能的符号表示机器指令,汇编语言源程序要翻译成机器语言才能由处理器执行,这个翻译的过程叫做汇编,完成汇编工作的程序就是汇编程序。 高级语言是面向问题的程序设计语言,它编写的语言要通过编译程序翻译成机器语言程序后计算机才能执行,或者通过解释程序边解释边执行。 3、汇编语言不区分大小写
程序设计时分段管理,但有两个限制:每个段最大为64KB,段只能开始于低4位地址全为0的物理地址处 逻辑地址=段地址∶偏移地址 物理地址=段地址×16+偏移地址 指令由操作码和操作数组成 语句格式: 执行性语句: 表达处理器指令(硬指令) 标号: 硬指令助记符 操作数,操作数 ;注释 说明性语句: 表达伪指令,控制汇编方式 名字 伪指令助记符 参数,参数,…… ;注释
Debug+可执行文件名,可用-t一步步执行 第一步:
执行的是.startup中暗含的语句,ip是下一段要执行的指令,下一段要执行的是mov ds,dx
ds变成了076E,IP自动增为0005,8CD3是机器码,执行的是mov bx,ss 执行减法 将bx里的值左移一位,相当于把它的值*2 这一系列都是初始化操作,CLI设置状态标志位IF=0 STI设置状态标志位IF=1 开始执行这里: mov dx,0002(msg的偏移地址) -d+逻辑地址表示查看内存某一个位置存放的是什么 我们显示的是0002,图中48是H的ASCII码,65是e的ASCII码…… Msg指向内存中的一个字节,存储的是内存中某一个字节的逻辑地址,这个字节就是48所在的位置,就是076E:0002,最低的那个 24:$符号 修改ah值,al不变 如果再-t,执行的就是dos的子程序,-p使其一步完成 程序执行结束,-q退出