此题解题背景默认为8080型CPU,地址总线为16根.(8080-16,8086-20,8088-20,80286-24,80386-32) 16根地址总线寻址能力:(2 ** 16) / 1024 = 65536(B) = 64(KB), 可以表示的存储单元个数为 0 ~ 2^n-1 个, 即 0 ~ 65535. 这里的 65535 为十进制数,转换为十六进制数为 0xffff (或 ffffH),具体转换方法可以用 Python3 函数 hex(65535). 再来看CPU内存单元物理地址…
目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写法 call 指令大全图表 王爽汇编第十章,call和ret指令 call和ret指令概述: call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP.他们经常被用来实现子程序(函数)的设计. ret和retf ret指令 ret指令:用栈中的数据,修改IP的内容,从而实现(近转移):…
目录 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 例子: 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 [bx]之前我们介绍寄存器的时候,已经很详细的说明过了,bx是偏移寄存器用来索引,那么加上[]表示他是一个内存单元,段地址在ds寄存器中,偏移地址在bx中,计算方式:ds*16 + bx looploop指令是一个循环指令,他的指令格式是loop 标号,CPU执行loop指令的之后,要进行两个步骤: (cx) = (cx) - 1 判断cx的值,不为0则转…
;名称:ILOVEU程序 ;使用BIOS提供的中断例程 assume cs:code code segment main: ;显示背景22*80 ;dh中放行号 ;dl中放列号 bibi: push cx ;显示光标 ;第0页 int 10h ;在光标处显示个数自定的字符 ;9为在"在光标处显示字符的功能"的功能号 ' ;字符 mov bl,00001010b ;颜色属性 ;第 0 页 ;显示字符的个数 int 10h inc dl ;显示光标 ;第0页 int 10h ;在光标处显示…
一.前言 最近在学习汇编语言,使用的是读者评价非常高的王爽老师写的<汇编语言>(第三版),为了适应现在各个版本的windows操作系统,所以采用VMWare虚拟机来搭建纯DOS环境. 二.需要的工具 VMware-workstation-12.DOS系统镜像文件.汇编编译器masm和连接器link 百度云下载链接:https://pan.baidu.com/s/1gfz4N67 密码:02y1 三.安装VMware-workstation-12 傻瓜式安装,一直点击下一步就可以(虽然网上也可以…
坐起来非常容易,找到这条路确实非常曲折,为了后来的同志们不再纠结,特记录如下: 这几天看汇编语言时,很多人都推荐王爽老师的<汇编语言>,老师的书的确写的很好,但是讲的是ms的汇编,但是总不能为了简单的几行汇编代码,就让我装个windows吧,win10几乎没有什么用处,win7有点大,winxp也太老了.自己好歹也是用linux近20年了, 这点还难不到我.主要如下步骤就可以轻松搞定linux下的masm编程,而且具有书上的一切环境,也可以使用linux下的各种工具. 一.首先安装软件: pa…
在学习王爽老师<汇编语言>的第6.2节时,在程序6.3代码中,给出了如下的代码: assume cs:code code segment dw 0123h, 0456h, 0789h, 0abch, 0123h, 0456h, 0789h, 0abch dw ,,,, ,,,, ,,,, ,,, start: mov ax,cs mov ss,ax mov sp,30h mov bx,0h s: push cs:[bx] loop s s0: pop cs:[bx] loop s0 mov a…
(一) 研究目的 使用C语言编程,我们一定要使用main函数么? (二) 研究过程 1) 最初的程序 首先,我们编写一个不写main函数的C语言程序. 程序如下: 在编译的过程中,没有发现错误.在链接的过程中发现出现的错误如下: 链接时出现Undefined symbol ‘_main’ in module c0s 这样的错误信息,可能main函数与c0s.obj这个文件有关系. 这时我们想,C语言编译之后的文件后缀名是什么?是.obj.那汇编语言编译后的文件名是什么?也是.obj.这两个文件有…
第一章 基础知识 存储器(内存)存放CPU工作的指令和数据(CPU可以直接使用的信息在内存中存放):指令和数据都是二进制数没有任何区别,由CPU决定是数据还是指令 内存单元:存储器被分为若干个存储单元,并从0开始编号(存储单元的地址),一个存储单元为1字节(8bit) CPU的读写 总线逻辑上分为:地址总线.数据总线.控制总线 地址总线:地址线宽度决定了CPU的寻址能力,计算方式 :2^[地址线宽](个内存单元) 数据总线:决定了CPU和外界的数据传输速度(8根数据总线可传送一个8位(bit)二…
1. 要不要学习汇编 可以只懂一点,工作中基本不用,一旦用就是出了大问题 ldr : load 读内存 ldr r0, [r1]  : r1里存放的是地址值, 去这个地址读取4字节的内容,存入r0 str : stroe 写内存 str r0, [r1]  : r1里存放的是地址值, 把r0里的4字节数据存入这个地址 所有的汇编.C程序也好,终极目标就是:读写某个地址 2. 程序为何要分为代码段.数据段.BSS段 程序的指令等是只读的,可以把它们归为一类,以便运行时可以放在ROM等设备上, 当然…