java打印对象内存地址 分布式事务 事务消息 分布式事务 几种解决方案 分布式事务-Seata 分布式事务-Seata 分布式事务-LCN-TCC 分布式事务-LCN 分布式事务-消息队列-定时任务-本地事件表 Zuul网关实战02 Zuul网关实战01 灰度发布落地实战2 灰度发布落地实战1 Gsnova on Heroku build Systemd Debian system initialization manage multi id_rsa ubuntu 64bits cannot run 32bits app REHL power auditing Debug Assembly for ARMv8 on QEMU ARM体系结构--寄存器 Run Debian iso on QEMU ARMv8 QEMU ARM64 guide cross compiler install buildroot install QEMU install python入门--数据结构 python入门--内置数据类型 python入门--类 异常 python入门--条件表达式 方法 python入门--数字 字符串 数组 RTC驱动分析 块设备驱动 TCP UDP socket 触摸屏驱动 USB驱动 LED按键中断 LCD 驱动 驱动信号 根文件系统 实验 内核实验 字符设备驱动程序 绪论 uboot 实验 LCD 实验 系统时钟和UART 中断控制器 Nand Flash控制器 MMU 实验 储存管理器实验 GPIO实验 点亮LED 编译加载驱动 制作烧写内核 dnw替代方法 MINI2440 TQ2440安装配套Linux 使用NFS 制作烧写跟文件系统 grub引导Windows 烧写裸版程序-linux Ubuntu 网络没有 eth0 Linux自动挂载 烧写裸板程序 电路基础 Mac词典 Vim插件 Assembly 综合研究 Assembly 指令总结 Assembly 直接定址表 Assembly 使用BIOS进行键盘输入和磁盘读写 Assembly 外中断 Assembly 端口 Assembly int指令 Assembly 内中断 Assembly 标志寄存器 Assembly 转移指令的原理 Assembly Call和ret指令 Assembly 数据处理两个基本问题 Assembly 灵活定位内存地址 Assembly 包含多个段的程序 Assembly [bx] loop Assembly 第一个程序 Assembly 寄存器 (内存访问) Assembly 寄存器 AWS VPN with EC2 hidden file in picture(linux) Assembly 基础 idea shortcuts 常用快捷键 idea plugin folder install ruby and jekyll

Assembly 第一个程序

2014年09月19日

###一个源程序从写出到执行的过程 1.编写汇编源程序

2.对源程序进行编译连接

    使用汇编语言编译程序对源文件中的源程序进行编译,产生目标文件;再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件

3.执行可执行文件中的程序

###源程序

assume cs:codesg

codesg segment

		mov ax,0123H
		mov bx,0456H
		add ax,bx
		add ax,ax
		
		mov ax,4c00H
		int 21H
		
codesg ends

end

####1.伪指令 在汇编语言源程序中,包含2种指令:汇编指令、伪指令。

汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终CPU所执行

伪指令没有对应的机器指令,最终不被CPU所执行

伪指令是由编译器来执行的指令


segment和ends是成对使用的伪指令,功能是定义一个段

end 是一个汇编程序的结束标记,编译器在编译汇编程序中,当碰到伪指令end就结束对源程序的编译

assume 含义为“假设”,(不重要),用assume 将有特定用途的段和相关的段寄存器关联

####2.源程序中的”程序” 将源程序中最终由计算机执行、处理的指令或数据,成为程序。程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中。

####3.标号 比如“codesg”,一个标号指代了一个地址。比如codesg在segment前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址

####4.程序的结构 如上代码

####5.程序返回 程序返回:一个程序结束后,将CPU的控制权交还给使它得以运行的程序

	mov ax,4c00H
	int 21H

这两条指令所实现的功能就是程序返回

####6.语法错误和逻辑错误 程序在编译时,被编译器发现的错误是语法错误

运行时发生的错误是逻辑错误,不容易被发现

###编辑源程序 如上代码 保存为1.asm ###编译 win32下

进入dos方式,进入c:\masm目录,运行masm.exe

x86_64 or unix-like 使用dosbox

或者配置环境变量(自行Google)

###连接 c:\masm\link.exe

###简化编译连接 masm c:\1;

link c:\1;

###谁将可执行文件中的程序装载进入内存并使它执行? 1.在dos中直接执行1.exe时,是正在运行的command,将1.exe中的程序加载入内存

2.command 设置CPU的CS:IP 指向程序的第一条指令(即程序的入口),从而使程序得以运行

3.程序运行结束后,返回到command中,CPU继续运行command

###程序执行过程的追踪 debug 1.exe


DOS系统中.exe文件中的程序的加载过程: