汇编语言

《汇编语言》王爽_第三版—实验三

房东的猫 提交于 2019-11-26 16:12:59
汇编程序源码如下 assume cs:codesg codesg segment mov ax,2000H mov ss,ax mov sp,0 add sp,10 pop ax pop bx push ax push bx pop ax pop bx mov ax,4c00H int 21H codesg ends end (1)用debug跟踪t1.exe的执行过程,写出寄存器的内容和栈顶内容。 执行 mov ax,2000H ax = 2000 sp = 0000 执行 mov ss,ax ax = 2000 sp = 0000 执行 mov sp,0 ax = 2000 sp = 0000 执行 add sp,10 ax = 2000 sp = 000A 执行 pop ax ax = 0000 sp = 000C 执行 pop bx ax = 0000 sp = 000E 执行 push ax ax = 0000 sp = 000C 执行 push bx ax = 0000 sp = 000A 执行 pop ax ax = 0000 sp = 000C 执行 pop bx ax = 0000 sp = 000E 执行 mov ax,4c00H ax = 4c00 sp = 000E (2)查看 psp内容 用d命令查看 来源: https://blog.csdn.net

编译程序、汇编程序、链接程序三者的区别

只谈情不闲聊 提交于 2019-11-26 14:20:08
编译程序:高级语言→汇编语言的过程 汇编程序:汇编语言→机器语言的过程 附C语言编译链接过程: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 特点:执行速度快、效率高;依靠编译器、跨平台性差。 如C、C++、Delphi、Pascal、Fortran 解释型语言:把做好的源程序翻译一句,然后执行一句,不会生成目标程序。 特点:执行速度慢、效率低;依靠解释器、跨平台性好。 如Java、Basic、JavaScript、Python 来源: https://blog.csdn.net/yiyu_j/article/details/98884727

汇编语言基础

微笑、不失礼 提交于 2019-11-26 10:25:21
寄存器 寄存器是处理器内部的高速缓冲区,用于暂时存放数据。 寄存器的分类: 透明寄存器:这类寄存器不需要程序员进行操作。 可编程的寄存器:这是我们程序员需要学习的这类寄存器又分为通用寄存器和专用寄存器 32位通用寄存器:eax ebx ecx edx edi esi ebp esp 16位通用寄存器:ax bx cx dx di si bp sp 8位通用寄存器:al ah bl bh cl ch dl dh 专用寄存器的种类 标志寄存器:eflags 指令指针寄存器:eip 段寄存器:cs ds ss es gs fs 我们可以看到通用寄存器有8位16位和32位的,这是发展的结果,比如在一个32的系统中eax寄存器包含32个位,其中al是eax的最后8位,ax是eax的最后16位,因此ax也是包含al和ah的。 下面是一个图来表示各种寄存器关系 16246589-db1a04ca767f426d.png 寄存器.png 16246589-d394f64dbdd73b94.png 寄存器结构.png 下面是我们通常使用的通用寄存器名称 16246589-87d5e26a527d0dac.png 通用寄存器.png 计算机存储器的分级 按照读取速度进行分等级 硬盘->内存->缓存->寄存器 这个顺序表示存取速度依次递增的顺序进行排序的并且存储器的大小是依次递减的但是价格是依次递增的

C为什么不能跨平台?

和自甴很熟 提交于 2019-11-26 09:22:41
本文参考于 https://www.cnblogs.com/jmsjh/p/7808764.html ,由于只是简单的做一些笔记,难免出错,请包涵。 还有很多内容没有记录,详细内容请参考原文! 关于C不能跨平台性的分析 不管是使用的IDE直接点击个运行按钮还是使用gcc命令进行编译(gcc -o hello hello.c) ,得到最后的输出结果。但是实际上hello world程序的编译是这样的(以hello world程序为例) 预处理阶段 :预处理器(cpp)把代码中#开头的行进行展开,比如头文件,宏扽分内容,修改最初的C文件。 编译阶段 :编译器(ccl)将修改后的C文件,翻译成了另外一个文本文件,hello.s 这就是所说的汇编程序了,不同的CPU和平台环境,编译输出的汇编代码也是不同的。 汇编阶段 :汇编器(as)将hello.s翻译成机器语言指令。把这些命令打包成一种叫做可重定位目标程序的格式。这其实就是二进制文件了。 链接阶段 :编译过程最后还有一个链接阶段(程序调用过了printf函数),最后输出结果还是和上一步相同,是一个直接二进制文件。 结合图片和文字描述我们可以很好的了解hello world程序的编译过程。接下来我们简单认识一些汇编语言。 汇编就是比二进制操作起来更简单高效的一种语言,编写好的汇编程序需要通过汇编器编译成0和1这样计算机就可以识别。