小甲鱼汇编零基础入门
正在检查该链接是否有效...
2012-03-19 16:47 飞向梦 阅读(107) |
第十四章 端口
摘要: 1、CPU可以直接读写3个地方的数据:CPU内部的寄存器、内存单元、端口。2、端口的读写指令只有两条:in和out,读取和写入。(1)访问端口3、网页访问的是80端口,ftp访问的是21号端口。4、CMOS RAM芯片:①包含一个实时钟和一个有128个存储单元的RAM存储器。②该芯片靠电池供电。因此关机后其内部的实时钟仍可正常工作,RAM中的信息部丢失;③128个字节的RAM中,内部实时钟占用0——0dh单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取。④该芯片内部有两个端口,地址为70h和71h,70h为地址端口,存放要访问的CMOS RAM单元的地址,
posted @ 2012-03-18 18:04 飞向梦 阅读(92) |
第十三章 int指令
摘要: 1、int指令:CPU执行int n,相当于引发一个n号中断的中断过程。因此,一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。2、int和iret指令配合跟call和ret指令相似。3、注意寄存器值的保存和恢复。4、对int、iret和栈的深入理解:用7ch中断完成loop指令。5、 BIOS和DOS中断例程的安装判断下面说法的正误:1.我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。答:这种说法是错误的。因为该内存单元具有‘只读’属性。2.int 19h中断例程,可以由DOS提供。答:这种说法是错误的。因为in阅读全文
posted @ 2012-03-18 16:00 飞向梦 阅读(157) |
第十二章 内中断
摘要: 1、中断是CPU处理外部突发事件的一个重要技术。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断。外部中断是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说利用中断控制器可以屏蔽这些外部设备中断请求。内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。软件中断其实并不是真正的中断,他们只是可被调用执行的一般程序以及DOS的系统调用功能(int 21h)等都是软件阅读全文
posted @ 2012-03-18 08:27 飞向梦 阅读(203) |
第十一章 标志寄存器
摘要: 1、8086CPU的标志寄存器(flag)有16位,其中存储的信息通常被称为程序状态字(PSW,program state word)。标志寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息(用0或者1表示有还是没有)2、flag中的1、3、5、12、13、14、15在8086中没有使用,不具有任何意义。第六位是ZF,零标志位,它记录相关指令执行后,结果为0,ZF=1,结果不为0,ZF=0。第二位PF,奇偶标志位,记录结果的所有二进制位中1的个数,偶数,PF=1。第七位SF,符号标志位,结果为负,SF=1。第零位CF,进位标志位,一般来说,在进行无符号数运算的时候,它记录
posted @ 2012-03-18 08:25 飞向梦 阅读(218) |
第十章 call和ret指令
摘要: 1、call和ret指令都是转移指令,他们都修改ip或同时修改cs和ip。2、ret指令用栈中的数据,修改ip的内容,从而实现近转移。操作:1.(ip)=((ss*16)+(sp));2.(sp)=(sp)+2。retf指令用栈中的内容同时修改cs和ip3、call指令经常跟ret指令配合使用,因此CPU执行call指令,进行两步操作:1.将当前的ip或cs和ip压入栈中;2.转移(jmp)。Call指令不能实现短转移,跟jmp操作相似。操作:1.push IP;2.jum near ptr 标号。范围-32768~32767,补码表示。(转移位移)4、转移的目的地址在指令中的call指令:段阅读全文
posted @ 2012-03-17 15:08 飞向梦 阅读(162) |
第九章 转移指令的原理
摘要: 1、8086CPU转移指令分类:1.无条件转移指令(如jmp);2.条件转移指令;3.循环指令(如:loop);4.过程;5.中断。2、offse,伪指令,功能是取得标号的偏移地址。3、nop的机器码占一个字节,不产生任何结构,仅消耗几个时钟周期,接着执行后续指令,常用于程序的延时等。4、jmp指令要给出两种信息:1.转移的目的地址;2.转移的距离(段间转移、段内短转移、段内近转移)。5、依据位移进行的jmp指令:①jmp short 标号(转到标号处执行指令),这种格式的jmp指令实现的是段内短转移,它对ip的修改范围为-128~127;②jup near ptr 标号,near ptr指明阅读全文
posted @ 2012-03-15 16:08 飞向梦 阅读(213) |
实验九 根据材料编程
摘要: 实验九头疼了一天,终于搞定了,其实也不是算法问题,算法倒是挺简单的,主要是显示问题,好纠结。。。。View Code 1 ;测试:向内存从b810:0000开始的单元写入数据如:-e B810:0000 01 01 02 02 03 03 04 04 2 assume cs:code,ds:data,ss:stack 3 4 data segment 5 db 'welcome to masm!' 6 data ends 7 8 stack segment 9 dw 0,0,010 stack ends11 code segment12 13 start: mov...阅读全文
posted @ 2012-03-15 06:32 飞向梦 阅读(213) |
第八章 数据处理的两个基本问题
摘要: 1、计算机是进行数据处理、运算的机器,那么有两个最基本的问题:1.处理的数据在什么地方?2.要处理的数据有多长?2、定义描述性符号:reg(register 寄存器)和sreg(segment register 段寄存器)。Reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di。sreg集合包括:ds、ss、cs、es(扩展段)。3、1.在8086CPU只有这4个寄存器(bx、bp、si、di)可以用[ ]来进行内存单元寻址;2.在[ ]中,这四个寄存器(bx、bp、si、di)可以单个出现,或只能以四种组合出现:bx和si、bx和di阅读全文
posted @ 2012-03-13 22:01 飞向梦 阅读(88) |
第七章 更灵活定位内存地址
摘要: 1、and指令:逻辑与指令,按位进行运算,通过and指令可将操作对象的相应位设为0,其他位不变,例:and al 10111111B。or指令:逻辑或指令,按位进行运算,通过or指令可将操作对象的相应位设为1,其他位不变,例:or al 01000000B。2、用字母表示数据,例:‘a’。3、小写转大写and al 11011111b。大写转小写or al 00100000b。4、[bx+idata]形式实现数组:idata[bx]。5、SI和DI寄存器:16位寄存器,但是不能够分为两个8位寄存器来使用。6、16位寄存器进行内存单元之间的数据传送,一次复制两个字节。[bx][si]。7、[bx阅读全文
posted @ 2012-03-13 20:01 飞向梦 阅读(81)
第六章 包含多个段的程序
摘要: 1、在代码段中使用数据:“dw”定义字型数据,即define word。定义字节型数据db,define byte。dw定义数据处于代码段的最开始,所以偏移地址为0。2、CPU根据机器指令的不同组合会构成不同的代码。3、在代码段中使用栈:定义8个字型数据也可以说开辟了8个字型空间。4、将数据、代码、栈放入不同的段:实验五:5、mov ax,aMov cs,axMov ax,bMov ds axMov ax,cMov ss,axMov bx,0Mov cx,8S:add ss:[bx],ds[bx]Add ss:[bx],cs[bx]Add bx,2Loop s6、mov ax,aMov ds,阅读全文
posted @ 2012-03-13 06:51 飞向梦 阅读(90) |
第五章 [bx]和loop指令
摘要: 1、用debug写命令和编译器写命令是不一样的。2、完整的描述一个内存单元需要两种信息:1.内存单元的地址;2.内存单元的长度(类型)。我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出,如前边的AX,AL。3、[bx]同样也表示一个内存单元,它的偏移地址在bx。4、描述性符号“()”表示取内容。约定符号idata表示常量。5、loop指令使用:1.在cx中存放循环次数;2.loop指令中的标号所标识地址要在签名;3.要执行的程序段要写在标号和loop指令中间。6、考虑计算会不会溢出。7、把内存单元xx阅读全文
posted @ 2012-03-12 18:04 飞向梦 阅读(163) |
第四章 第一个程序
摘要: 1、一个程序从写出到执行的过程:编写(使用文本编辑器)、编译链接(使用汇编语言编译程序(MASM.EXE)对源程序编译,产生目标文件,在用链接程序(link.exe)对目标文件进行链接,生产可执行文件)、执行(操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如:设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。2、可执行文件:1.程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)2.相关的描述信息(比如:程序有多大、要占多少内存空间等)。PE(黑客)3、源程序:汇编指令(有对应的机器码,最终被CPU执行)、伪指阅读全文
posted @ 2012-03-12 10:53 飞向梦 阅读(127)
第三章 寄存器(内存访问)
摘要: 1、字型数据考虑两个字节,本高字单元+本字单元2、DS和[address]:DS存放要访问数据的段地址。3、mov指令可以完成两种传送功能:1.将数据直接送入寄存器;2.讲一个寄存器中的内容送入到另一个寄存器。除此之外,mov指令还可以将一个内存单元中的内容送入到一个寄存器。例mov al,[0]。执行指令时,8086CPU会自动取DS中的数据为内存单元的段地址。4、如何把1000H送入DS?8086CPU不支持将数据直接送入段寄存器的操作,DS是一个段寄存器(硬件设计问题)。数据——通用寄存器——段寄存器。5、如何将al中的数据送入内存单元10000H?6、[0]何时是一个字,何时是一个字节阅读全文
posted @ 2012-03-11 17:00 飞向梦 阅读(165) |
第二章 寄存器(CPU工作原理)
摘要: 1、8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。AX、BX、CX、DX通用寄存器。2、8086CPU所有的寄存器都是16位的,可以存放两个字节。3、几条汇编指令(汇编指令不区分大小写)4、al溢出不会进到ah里面,它们是两个单独的寄存器。进制位不能在8位寄存器中保存,但是CPU不会丢弃这个值。检测点:老简单了。。5、物理地址:CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,将这个唯一的地址称为物理地址。6、16位结构描述了一个CPU具有特征:1.运算器一次最多可以处理16位的数据阅读全文
posted @ 2012-03-10 21:51 飞向梦 阅读(310) | 评论 (0) 编辑
第一章 基础知识
摘要: 1、用机器的思想操作机器2、用汇编去思考,用c去编程寄存器BX的内容送到AX中3、汇编语言组成:1.汇编指令(机器码的助记符)2.伪指令(由编译器执行)3.其他符号(由编译器识别)汇编语言的核心是汇编指令,它决定了汇编语言的特性。4、要想让CPU工作,就必须向他提供指令和数据,指令和数据在存储器中存放,也就是平时说的内存,内存的作用仅次于CPU。5、指令和数据是应用上的概念,在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。6、显存:显卡里面的内存,把数据存储到显存里面,GPU从显存里面读取显示7、CPU对存储器的读写:CPU要想对数据的读写,必须和外部器件(标准的说法是芯片)进行三类信阅读全文
正在检查该链接是否有效...