《汇编语言程序设计》学习笔记系列(一)
- 格式:doc
- 大小:87.00 KB
- 文档页数:6
汇编语言学习笔记---傻瓜学汇编前言当我在学汇编的时候发现一到了实际编程就发现学过的那些指令串不起来,什么浮点数啊整数啊,怎么跳转啊,怎么循环啊,脑袋立马变成浆糊。
下面的文档是我的学习经历,希望对初学者在学习加密解密,软件调试,单片机编程有点帮助。
目录1.编程环境的搭建2.深入理解汇编语言的数据3.顺序程序设计4.分支结构程序设计5.循环6.数组及指针7.函数8.结构9.综合运用10.参考文献一:编程环境的搭建首先装好masm32v10 和windbg,和editplus,然后在editplus中输入下面的程序,具体的请参考罗云彬的那本书,里面有详尽的说明,编译运行看看:.386.model flat,stdcalloption casemap:noneincludelibmsvcrt.libprintf proto C :V ARARG.datamsg db "hello,this is the first test program!", 0dh ,0ah,0.codestart:call mainretmain procpush offset msgcall printfadd esp,4push offset msgcall printfadd esp,4retmainendpend start下面是运行结果:这里输出两行消息主要是我在写这个最简单的程序的时候发现他不换行,于是我在数据定义后面我加了“0ah,0dh”,呵呵,就是回车换行的十六进制表示,你也可以用其他方法试试,程序就不多解释了,后面会有更多的解释,不过你一定要走到这以步,才能进行下一章。
2.深入理解汇编语言的数据整数常量及变量,先看一段很简单的汇编程序:.386.model flat,stdcalloption casemap:noneincludelibmsvcrt.libprintf proto C :V ARARG.dataPRICE EQU 30msg1 db "total=%d",0dh,0ah,0.codestart:call mainretmain proclocal num:dwordlocal total:dwordmov num,10mov eax,numimul eax,eax,PRICEmov total,eaxpush offset msg1call printfadd esp,4retmain endpend start程序的意思很简单就是在屏幕上打印出某个东西的价格,如过要你拿笔和纸算,拿你肯定很快就能算出来,但你让电脑怎么算呢?当电脑执行到第一个语句的时候,也就是num=10,它就把10放到某个地方并且记住这个值,寄存器或者内存,呵呵,它也就这两个地方,为什么要这么做呢?因为后面要用它来计算啊,为了算出这个值,电脑好的办法就是放在它的内存里,为什么不是寄存器?因为寄存器太少了,就那么几个,呵呵,所以了它就把10存在一个叫num的内存里,注意了哦,num是程序里的变量名,是存中里的一个位置的名称,它的值是10,你可能会问,不起名不行么?行,等下在调试器中你看到的就是没名的。
《汇编语言程序设计》学习总结与心得其实说实话在学这门课之前自己对汇编语言一点都不了解,只知道它也是一种语言,而且是一门很少用的语言,可能很多人都是这么想的,或许在学这门课之前不少同学也有和我当初一样的思想,大概学学就好,反正以后很少能用到,毕竟现在高级语言这么发达,而且运用起来灵活易懂,像汇编这种低级语言又难又不易学。
或许老师是知道我们之前有这种想法,所以第一节课就跟我们讲解了一下了汇编语言在当今这种高速发展的社会的作用和地位,让我们能够正确的认识汇编语言的精华,正确对待这么课。
而且还在课堂了百度了汇编语言的招聘信息,或许这才是使我们正确对待汇编的最直接的原因,关系到我们以后的出路,或许我们学好了一门汇编,以后出去找工作的机会不就更广了吗?正是在这种动力的驱使下我才对汇编语言有了一个新的认识,而且决定要把它学好。
在后来的学习中我发现其实汇编不是很难学,其实学汇编就像学其他的高级语言一样,高级语言要求对语言非常了解。
在学汇编的过程中,我们最重要的就是要掌握汇编语言中的指令的一些基本用法。
当然要能够真正的了解其中的内涵,这样我们在实际的编程中也能够像运用高级语言一样灵活的变通。
汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。
比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。
前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。
到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。
以C语言为例,C语言不也是由一个一个的函数组成的吗?没想到想汇编这样的低级语言也可以这样。
在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。
尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。
汇编语言学习笔记1进行学习8086系列汇编语言,针对《王爽汇编语言》学习心得体会。
汇编语言是基于硬件的编程,首先要有一台PC机。
当然纯粹的X86计算机已经不存在,但是有一台兼容INTEL CPU 的计算机完全满足学习需求。
汇编语言适合具体的微处理器相联系的,由于不同的CPU 有不同的架构,所以不同的CPU 具有不同的汇编语言。
本人学的是x86汇编语言当然针对的也是intel cpu。
《王爽汇编语言》知名汇编语言编程平台是硬件系统而不是操作系统。
从而汇编语言能够充分的让程序员体验到底层编程的乐趣。
当然对于初学者具有一定的高级语言编程基础,二进制,十六进制等基础知识更好。
第一章基础知识1.1 机器语言最初控制计算机运算的是机器语言,机器语言是早于汇编语言的一种最底层的语言,就算汇编语言也是利用汇编语言编译器将汇编语言编译成机器语言,计算机才能执行。
因为计算机只能执行机器语言。
但是由于汇编语言与机器语言一一对应,所以汇编语言具有很高的执行效率。
这是其他高级语言无法比的。
但是由于机器语言全部是二进制数,给编程带来了极大地不便。
导致了整个计算机行业的发展缓慢,就这样会变啊语言诞生了。
1.2 汇编语言汇编语言的主题是汇编指令——汇编指令就是机器指令的便于记忆的书写格式。
例如机器指令:100010011111000 汇编指令: MOV AX,BX当然如前边所说,计算机能读懂的只有机器指令,汇编语言还是要被翻译成机器指令。
汇编语言的组成--1 汇编指令:机器码的对应助记符。
2 伪指令:由编译器识别执行,没有对应的机器码 3:其他符号例如(+,-*/...)1.3 存储器存储器是计算机的核心部件,cpu执行的指令和数据都存放在存储器中。
如果cpu是大脑那么存储器就是大脑的记忆。
没有了记忆的大脑是不能进行工作的。
1.4 指令和数据在计算机中指令和数据都是一样的--二进制代码1.5 存储单元存储器都被换分成若干个存储单元,编号从0开始(值得注意)计算机的最小存储单元就是bit(比特)就是一个二进制位,8个二进制位组成一个字节(byte)当然计算机能够识别的最小单位就是字节。
汇编语言学习笔记《汇编语言》--王爽前言学习汇编目的:充分获得底层编程体验;深刻理解机器运行程序的机理。
原则:没有通过监测点不要向下学习;没有完成当前实验不要向下学习。
第一章基础知识有三类指令组成汇编语言:汇编指令;伪指令;其他符号。
8bit = 1byte = 一个存储单元有n根地址线,则可以寻址2的n次方个内存单元。
1.1节--1.10节小结(1)汇编指令是机器指令的助记符,同机器指令一一对应。
(2)每一种cpu都有自己的汇编指令集。
(3)cpu可以直接使用的信息在存储器中存放。
(4)在存储器中指令和数据没有任何区别,都是二进制信息。
(5)存储单元从零开始顺序编号。
(6)一个存储单元可以存储8个bit,即八位二进制数。
(7)每一个cpu芯片都有许多管脚,这些管脚和总线相连。
也可以说,这些管脚引出总线。
一个cpu可以引出的三种总线的宽度标志了这个cpu不同方面的性能。
地址总线的宽度决定了cpu的寻址能力;数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了cpu对系统中其他器件的控制能力。
监测点:1KB的存储器有1024个存储单元?存储单元的编号从0到1023.内存地址空间:最终运行程序的是cpu,我们用汇编编程时,必须要从cpu的角度思考问题。
对cpu来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受cpu寻址能力的限制。
这个逻辑存储器即是我们所说的内存地址空间。
第二章寄存器(cpu的工作原理)mov ax, 2add ax, axadd ax, axadd ax, ax(1)cpu中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;(2)段地址和偏移地址通过内部总线送人一个称为地址加法器的部件;(3)地址加法器将两个16位地址合成为一个20位的物理地址;(4)地址加法器通过内部总线将20位物理地址送人输入输出控制电路;(5)输入输出控制电路将20位物理地址送上地址总线;(6)20位物理地址被地址总线传送到存储器;段地址*16+偏移地址= 物理地址的本质含义内存并没有分段,段的划分来自cpu。
汇编学习笔记-11.基础1.1汇编语⾔机器语⾔:是“机器指令”的集合,机器指令是⼀串⼆进制数字,可以由计算机转换为⼀列⾼低电平并执⾏每⼀种cpu,都有⾃⼰的指令集。
也就是不同cpu因为设计不同,指令集也是不同的但由⼆进制数组成的机器语⾔显然不易于阅读,记忆,所以也就有了汇编语⾔汇编语⾔实际上是机器语⾔的助记符,编些完后通过编译器,将汇编代码替换成机器能执⾏的⼆进制串汇编代码由这三部分组成:1. 汇编指令:机器码助记符,也就是它有对应的机器码2. 伪指令:没有对应机器码,由编译器执⾏(在编译过程中)3. 其他符号:⽐如 +,−,∗,/,由编译器识别当然,汇编的主要部分是汇编指令,后两种都是写给编译器看的(其实算是⼀类,主要是有符号和指令的区别)1.2存储器和其它有关存储、数据等存储器⽤来存储数据、指令它被划分为⼀些存储单元(编号从 0 开始),⼀个单元存储⼀个 Byte,也就是⼋个⼆进制位主要的存储器是内存,不同与磁盘,cpu只能从内存⾥读取数据、指令,不能从磁盘读取。
因此,任何磁盘中的指令或数据,想要被cpu使⽤,都必须先加载到内存⼀般如果要画图表⽰某⼀段内存中的数据的时候,习惯将低地址放在上,⾼地址在下,也就是从 0 开始从上往下来写这也意味着,从这种图⾥读⼀个⼆进制数的时候,要从下向上读上⾯提到了数据和指令,其实指令就是以前说的机器码,和数据⼀样,在存储器上看,都是⼆进制串,没有什么不同只是cpu在处理时,将他们区分开,分别作为指令来执⾏,作为数据来处理cpu对存储器的读写以及三种总线上⾯说存储单元有⼀个“编号”,这个编号就被称为某⼀段数据的地址如果cpu想在某段存储单元读或写,就要先给出它的地址,有了地址以后,还要知道操作是读还是写,以及读出的或要写⼊的数据是什么所以,cpu会和对应的芯⽚进⾏三种信息的交互:地址,读或写的数据,以及读或写的命令(称为控制信息)那么就要⽤到下⾯说到的三种总线了地址总线⽤来指定读写的存储单元cpu把地址发送给内存进⾏寻址(内存收到以后会⾃动定位过去),如下图,每⼀根地址总线能发送⼀个⼆进制位(零或⼀)当然,cpu在发送地址之前,要在内部先⾏成这个地址。
汇编语言学习笔记一AX累加寄存器accum ulat orBX基地址寄存器bas eCX计数器countDX数据寄存器dataAH、AL、B H、BL、CH、CL、DH、DL(8位数据寄存器。
一个十六位的数据寄存器可以分为两个8位数据寄存器。
有高位、低位之分。
)SI源地址寄存器s ource i ndexDI目换变址寄存器Desti nation indexBP基址指针寄存器base point erSP堆栈指针寄存器stack point erCS代码段code segmentDS数据段data segm entSS堆栈段stack segmentES附加段extr a s egm entIP指令指针i nstruction poi nterFLAG 标志寄存器运算结果标志CF进位标志c arry fl agZF零标志z ero fl agSF符号标志si gn fl agOF溢出标志over flow flagPF奇偶标志parity fl agAF辅助进位标志auxiliar y carry fl ags状态控制标志DF状态控制标志di rection flagIF中断允许标志i nter upt-enable fl agTF追踪标志trap flag以字节为单位线性组织寄存器,存储单位地址采用16位。
一个字存放在存储器要占用连续的两个字节单元。
关于字的存放顺序是低位在前,高位在后关于字的读取顺序是高位在前,低位在后(存放与读取的顺序是相反滴)8086/8088有20根地址总线,它的物理地址长20位。
范围是00000h--fffffh。
物理地址是20位的,逻辑地址是16位的。
中间存在偏移(20:16=5:4,向左偏移了1位,这里的1位,对16进制数来说,就是在其后面加1个O,而对于二进制数来说就是在后面添加4个0)。
弄明白20位数,16位数与16进制数的区别物理地址、逻辑地址、段地址、偏移地址、段值段的起始地址是16的倍数,所以其可以表示为bbb bbbb bbbb bbbb 0000 ,用16进制可表示为xxx x0。
《汇编语⾔》第⼀章总结汇编语⾔(⾯向机器的程序设计语⾔)第⼀章初识汇编———基础知识的掌握这学期我们修读了汇编语⾔这门课,学习之前我很疑惑为什么学校要让我们先接触C和C++这类⾼级语⾔再让我们学习汇编这门低级语⾔课,于是带着许多的疑问,我⾛上了汇编的道路。
汇编课程使⽤的教材是王爽的汇编语⾔,这本书采⽤以8086CPU为中央处理器的PC机来进⾏学习,下⾯我们步⼊正题!翻开书的第⼀章是对基础知识的介绍,在章节的开头,我了解到,汇编语⾔是直接在硬件上⼯作的低级汇编语⾔,要想有效地应⽤汇编语⾔对硬件系统编程,就必须要了解硬件系统的结构。
所以在第⼀章我们会学习硬件系统结构,为⽇后的课程打好基础。
计算机编程语⾔的演进1.1机器语⾔机器语⾔是机器指令的集合。
机器指令是0和1构成的⼆进制信息。
机器语⾔直接⾯向机器,与机器的硬件操作⼀⼀对应。
其优点是计算机可以直接识别、执⾏,使⽤机器语⾔可以充分发挥计算机的硬件功能;⽽它的缺点是因为每⼀种微处理器有⾃⼰的硬件设计和内部结构,需要不同的电平脉冲来控制,所以每⼀种微处理器都有⾃⼰的机器指令集,所以依赖机器硬件。
难以记忆,直接使⽤机器语⾔编制程序极易出错,并且难以调试。
电平脉冲在上⾯的实例中,汇编语⾔和C语⾔⼗分简短易懂的代码却要⽤那么冗杂的机器码去表⽰,可见机器码的晦涩难懂和不易查错和调试。
1.2汇编语⾔由于机器指令的难以辨别和记忆,机器指令的助记符———汇编语⾔诞⽣了。
汇编语⾔的主体是由汇编指令组成的,汇编指令和机器指令的差别在于指令的表⽰⽅法上。
不同的CPU有不同的汇编指令。
汇编语⾔由以下3类组成:1、汇编指令(机器码的助记符)2、伪指令(由编译器执⾏)3、其它符号(由编译器识别)。
汇编语⾔的核⼼是汇编指令,它决定了汇编语⾔的特性。
3. 计算机硬件系统的基本结构冯诺依曼体系结构计算机系统的组成1.3存储器和存储单元CPU 是计算机的核⼼部件.它控制整个计算机的运作并进⾏运算,要想让⼀个CPU ⼯作,就必须向它提供指令和数据。
汇编语言程序设计知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;1、假设机器字长为8位,[+3]补 =00000011B,[-3]补= FD H 。
2、十六进制数0F8H表示的十进制正数为 248 ,表示的十进制负数为 -8。
3、8位二进制数被看成是带符号补码整数时,其最小值是 -128,最大值是 127 。
4、计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。
目前,微机中普遍采用的是ASCII 码,称为美国信息交换标准码。
第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器1、IP寄存器中保存的是?下一条指令的首地址2、FLAGS标志寄存器中共有几位条件状态位?6位3、有几位控制状态位?3位4、标志寄存器分为哪2类?条件码,控制5、哪个标志位用来控制可屏蔽中断请求是否被CPU响应?IF6、键盘I/O、显示I/O和打印I/O分别对应16、10和17号中断。
(2)存储单元的地址和内容,存储器地址的分段,实模式下逻辑地址、物理地址的表示。
1、如果SS=6000H,说明堆栈段起始物理地址是60000H。
2、已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为1420H 。
3、如果数据段中一个内存单元对应的物理地址为3F756H,(DS)=3F00H,那么使用DS段寄存器指明该单元的段基值时,需要使用哪一个偏移量才能正确访问该单元756H。
4.如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式(1)与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址).数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。
第一章预备知识一、教学基本内容1、了解机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,正确认识学习汇编语言的重要性。
2、掌握8086处理器中各寄存器的符号表示形式、大小及主要用途。
3、理解主存的编址方式以及存储器物理地址形成的方式。
4、理解8086处理器关于使用堆栈的有关规定,掌握堆栈操作指令的功能以及使用格式。
5、掌握数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式。
6、掌握标志寄存器中各标志位的置位方式。
重点:主存的编址方式以及存储器物理地址形成的方式难点:堆栈的概念及使用。
二、知识点:1、机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,要求达到“识记”层次。
2、8086处理器中各寄存器的符号表示形式、大小及主要用途,要求达到“识记”层次。
3、主存的编址方式以及存储器物理地址形成的方式,要求达到“理解”层次。
4、堆栈的概念及堆栈操作指令执行后内存及相关寄存器值的变化,要求达到“理解”层次。
5、数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式,要求达到“理解”层次。
6、标志寄存器中各标志位的置位方式,要求达到“识记”层次;运算对各标志位的影响,要求达到“掌握”层次。
1.1机器语言和汇编语言1、机器语言●三种语言的层次关系机器语言汇编语言高级语言●机器指令:指挥计算机完成某一基本操作的命令。
格式:操作码地址码1 地址码2例:将偏移地址为100的字存储单元中的内容加2,在回送到原存储单元中去的机器指令如下:8306640002其中8306H为操作码6400H 为目的操作数02H 为源操作数●指令系统:机器指令面向机器,每台计算机都规定了自己所特有的一定数量的基本指令,这批指令的全体即为该计算机的指令系统●机器语言:这种机器指令的集合。
● 机器语言程序:用机器语言编写的程序。
2、汇编语言ADD WORD PTR DS:[100],2● 汇编语言:用助记符表示机器指令的操作码; 用变量代替操作数的存放地址;在指令前冠以标号,用来代表指令的存放地址 ● 汇编语言与机器语言 注: 汇编程序:能够将汇编源程序翻译成目标程序(机器语言) ● 汇编语言的特点:① 所占空间、执行速度与机器语言相仿② 直接、简捷,能充分控制计算机的硬件功能1.2 Intel 8086 微处理器简介通用寄存器: AX(累加器) BX(基址寄存器) CX(计数器)DX(数据寄存器) ;可以分8位使用。
《汇编语⾔》学习笔记——基础知识0x01 基础知识1.1 机器语⾔机器语⾔是机器指令的集合。
机器指令是⼀列⼆进制数字,计算机将其转变为⼀列⾼低电平,使得计算机的电⼦器件受到驱动,从⽽完成运算。
上述计算机的功能由CPU(中央处理单元)来完成,是⼀种微处理器。
由于硬件设计和内部结构不同,就需要不同的电平脉冲控制,所以每⼀种微处理器都有⾃⼰的机器指令集,也就是机器语⾔。
1.2 汇编语⾔的产⽣由于机器语⾔难以辨别和记忆,汇编语⾔产⽣了。
汇编语⾔的主体的汇编指令。
汇编指令是机器指令便于记忆的书写格式。
操作:寄存器BX的内容送⼊AX。
机器指令:1000100111011000汇编指令:mov ax, bx计算机只能读懂机器指令,故需要将汇编指令转换为机器指令。
编译器负责将程序员写出的汇编程序编译为机器码,再由计算机最终运⾏。
1.3 汇编语⾔的组成汇编指令(核⼼)机器码的助记符,有对应的机器码。
伪指令、其他符号(+、-、*、/)由编译器执⾏,没有对应的机器码。
1.4 存储器CPU是计算机的核⼼运算部件,需要向其提供数据和指令。
数据和指令存放在存储器(内存)中,故需要了解如何在CPU和内存之间交换信息。
磁盘的数据和程序需要先读⼊内存才能进⽽被CPU使⽤。
1.5 指令和数据指令和数据是应⽤上的概念,本质都是⼆进制信息,没有区别。
1000100111011000 -> 89D8H(数据)1000100111011000 -> mov ax, bx(指令)1.6 存储单元存储器被分为若⼲个存储单元。
每个单元从0开始编号;存储器的容量是以字节为最⼩单位计算的。
磁盘的容量单位同内存⼀样。
1.7 CPU对存储器的读写CPU读写数据时必须和外部期间进⾏三类信息交互。
地址信息:存储单元的地址。
控制信息:器件的选择、读或者写的命令。
数据信息:读或者写的数据。
CPU通过总线和其他芯⽚传输信息。
总线就是⼀根根导线的集合。
汇编语言(笔记)1.原码表示法:符号+绝对值 0的表示不唯一2.反码表示法:正数的反码同原码,负数的反码数值位与原码相反 0的表示不唯一3.补码的表示法:正数的补码同原码,负数的补码为:写出与该负数相对应的正数的补码,按位求反,末位加一4.寄存器: <1>通用寄存器:数据寄存器、指针寄存器、变址寄存器<2>段寄存器:代码段、数据段、堆栈段、附加段<3>控制寄存器:指令指针寄存器(IP)、状态标志寄存器(FLAG)5.寄存器:数据寄存器:AX累加器、BX基址寄存器、CX计数寄存器、DX数据寄存器指针寄存器:BP基址指针寄存器、SP堆栈指针寄存器变址寄存器:SI源变址寄存器、DI目标变址寄存器段寄存器:CS代码段、DS数据段、SS堆栈段、ES附加段6.偏移地址:段内相对于段起始地址的偏移值(16位)(有效地址EA)7.物理地址 = 段地址*16d + 偏移地址155********8.PF:bit2(奇偶标志)当运算结果的低8位里,如果有偶数个1,PF就会被设定成19.16进制书写时,如果首位是字母,则前面一定补一个O。
例如oEFH10.不能用一般指令将立即数送进CS、DS、SS、ES中应先将立即数送入AX,再用AX送入DS、SS、ES中。
11.寻址方式:07.csf12.寄存器间接寻址:寄存器只能是SI、DI、BX、BP之一,书写使用时相应寄存器名字用【】括起来,表示该寄存器的内容为EA。
地址形成:(段寄存器)*16d + (寄存器)SI、DI、BX:默认的段寄存器为DSBP:默认的段寄存器为SS13.存储器直接寻址:(DS)*16 + disp——disp表示位移量14.DOS功能调用的方法:调用前将功能号送AH寄存器,同时根据功能号规定的要求准备好所有参数,然后执行INT 21H.例如:显示一个字符‘A’MOV DL,41H ;字符‘A’的ASCII码MOV AH,02HINT 21H15.1H功能调用——从键盘读入单个字符MOV AH,01HINT 21H ;读入的字符在AL寄存器16.2H功能调用——显示器输出一个字符MOV DL,字符 ;ASCII码,例如41HMOV AH,02HINT 21H事先必须将要显示的字符的ASCII码送DL。
《汇编语⾔第四版笔记》第⼀章基础知识知识点总线宽度:该总线有N个根线,则可以说这个总线的宽度为N主板:主板上有⼀些重要器件,器件通过总线连接。
这些器件有CPU,存储器,外围芯⽚组,拓展插槽等。
拓展插槽⼀般插有RAM内存条和各类接⼝卡接⼝卡:CPU通过总线向接⼝卡发送命令,接⼝卡根据CPU命令对外设进⾏控制从存储器的功能和连接上,可以分为以下⼏类随机存储器RAM:主随机存储器⼀般由两个位置上的RAM组成:装在主板上的RAM和插在拓展槽的RAM装有BIOS(基本输⼊输出系统)的ROM:BIOS是由主板和各类接⼝卡的⼚商提供的软件系统,可以通过它对硬件系统进⾏基本输⼊输出接⼝卡上的RAM:某些接⼝卡需要存储⼤批量数据,上⾯就装有RAM,⽐如显卡⾥的显存CPU把所有的存储器看作⼀个假想的逻辑存储器(⼜称内存地址空间)去使⽤内存地址空间的⼤⼩受CPU地址总线宽度的限制第⼆章寄存器知识点通⽤寄存器:⽤来存放⼀般数据的寄存器,如AX,BX,CX,DX因为以前的寄存器都是⼋位的,为了保证兼容,8086的16位寄存器可以拆分成两个独⽴的寄存器单独使⽤。
如:AX可以拆分为AH和AL因此8086CPU的寄存器可以⼀次处理两种尺⼨的数据:字节(8位)和字(16位)对于汇编指令 add al,93Hal是当作⼀个单独的寄存器来使⽤的,如果结果溢出,⾼位并不会放⼊ah寄存器⼀个合法的汇编指令,指令的两个操作对象位数应该是⼀致的,以下指令不合法: mov ax,bl (8位寄存器和16位寄存器之间传数据mov al,20000 (8位数据存不了200008086CPU是16位的,但是地址总线是20位的,不能让这16位字长限制了寻址范围,因此8086CPU采⽤两个16位地址合成⼀个20位物理地址的⽅法两个16位地址⼀个是段地址,另⼀个是偏移地址,通过⼀个加法器算出物理地址地址计算公式:段地址*16+偏移地址=物理地址含义:⽤⼀个基础地址(段地址*16(乘16在⼗六进制⾥就是左移⼀位))和⼀个相对于基础地址的偏移地址相加,给出内存单元的物理地址既然是通过相对的关系得出物理地址,所以⼀个物理地址可以有多种表⽰形式CPU可以将若⼲连续的内存单元看作⼀个段。
《汇编语言》学习笔记(清华大学王爽)清华大学《汇编语言》(王爽)读书笔记第一章基础知识◎汇编语言由3类指令组成汇编指令:机器码的助记符,有对应机器码。
伪指令:没有对应机器码,由编译器执行,计算机并不执行其他符号:如+-*/,由编译器识别,没有对应机器码◎一个CPU有n根地址线,则可以所这个CPU的地址线宽度为n,这样的CPU最多可以寻找2的n 次方个内存单元。
◎ 1K=2^10B 1M=2^20B 1G=2^30B◎8086 CPU地址总线宽度为20,寻址范围为00000~FFFFF00000~9FFFF 主存储器地址空间(RAM)A0000~BFFFF 显存地址空间C0000~FFFFF 各类ROM地址空间第二章寄存器(CPU工作原理)◎16位结构描述了一个CPU具有下面几个方面的结构特性运算器一次最多可以处理16位的数据寄存器的最大宽度为16位寄存器和运算器之间的通路为16位◎8086有20位地址总线,可以传送20位地址,达到1M的寻址能力。
采用在内部用两个16位地址合成的方法来形成一个20位的物理地址◎物理地址 = 段地址× 16 + 偏移地址◎在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。
段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB◎8086有四个段寄存器 CS、DS、SS、ES◎CS为代码段寄存器,IP为指令指针寄存器。
任意时刻,设CS中内容为M、IP中内容为N,8086CPU从内存M×16+N读取一条指令执行◎不能用mov修改CS、IP,因为8086CPU没有提供这样功能,可用指令JMP 段地址:偏移地址。
JMP 2AE3:3 JMP AX 修改IP 第三章寄存器(内存访问)◎DS数据段寄存器。
20192422李俊洁汇编语⾔程序设计1~4章学习笔记第⼀章基础知识1.1汇编语⾔的⼀般概念计算机程序设计语⾔分为三类:表⽰⼆进制数码表⽰a.机器语⾔:以⼆进制数码优点:运⾏速度快,程序长度最短。
缺点:不便于记忆和阅读。
的语句来编制程序⾃然语⾔的语句来编制程序⾼级语⾔:类似⾃然语⾔b.⾼级语⾔:类似优点:程序设计简单。
缺点:程序效率较机器语⾔低。
c.汇编语⾔(1)定义使⽤字母和符号来表⽰机器语⾔的命令,⽤⼗进制数或⼗六进制数来表⽰数据,这样的计算机程序设计语⾔就称为汇编语⾔。
(2)汇编语⾔程序与机器语⾔程序的关系⼀条汇编语⾔的语句与⼀条机器语⾔指令对应(⼀对⼀),汇编语⾔程序与机器语⾔程序效率相同。
(3)不同类型计算机有不同的机器指令系统和汇编语⾔描述需要熟悉计算机的内部组成结构,但只需要掌握⽤汇编语⾔编制程序时所涉及到的那些硬件的结构和功能1.2 学习和使⽤汇编语⾔的⽬的1.学习和使⽤汇编语⾔可以从根本上认识、理解计算机的⼯作过程。
即更充分地利⽤机器硬件的全部功能,发挥机器的长处。
3. 汇编语⾔程序的效率⾼于⾼级语⾔程序“效率”的含义:程序的⽬标代码长度程序运⾏的速度1.3 进位计数制及其相互转换⼀. 进位计数制使⽤⼀定个数的数码的组合来表⽰数字。
⼀些基本含义位权:各个位置上所表⽰的基本数值称为位权, 简称权。
基数:每个数位上能使⽤不同数码的个数称为基数。
⼆. 各种数制间的相互转换1. ⼗进制整数转换为⼆进制数(1)减权定位法(2)除基取余法2.⼗进制⼩数转换为⼆进制数(1)减权定位法(2)乘基取整法3. ⼆进制整数转换为⼗进制数(1)按权相加法(2)逐次乘基相加法4. ⼆进制⼩数转换为⼗进制数(1)按权相加法(2)逐次除基相加法5. ⼆进制与⼋进制和⼗六进制间的转换对应关系:三位⼆进制数对应⼀位⼋进制数,四位⼆进制数对应⼀位⼗六进制数。
1.4 带符号数的表⽰在⼀般算术表⽰中使⽤“+”和“-”来表⽰正数与负数,⽽在计算机中使⽤“0”和“1”来表⽰正数和负数。
汇编语言程序设计钱晓捷第五版第一章汇编语言基础知识在计算机科学领域,汇编语言是非常重要的一门编程语言,它直接面向计算机硬件,并且具有较高的执行效率。
钱晓捷的《汇编语言程序设计》是一本经典的教材,旨在帮助读者掌握汇编语言的基础知识。
本文将重点介绍《汇编语言程序设计钱晓捷第五版》第一章的内容,包括汇编语言的定义、特点以及基本的编程概念。
1. 汇编语言的定义:汇编语言是一种低级的计算机语言,它使用助记符(Mnemonic)代表机器指令,通过汇编程序将汇编指令翻译成机器指令。
相比于机器语言,汇编语言更容易阅读和编写,但仍然需要具备相当的硬件知识。
2. 汇编语言的特点:2.1 直接面向硬件:汇编语言直接操作计算机硬件,可以直接访问寄存器和内存等底层资源。
2.2 助记符表示指令:与机器语言使用二进制代码表示不同,汇编语言使用助记符代表指令,更加易读和易于理解。
2.3 灵活高效:汇编语言具有较高的执行效率,可以对性能要求较高的任务进行精确控制。
3. 汇编语言的基本概念:3.1 寄存器:寄存器是汇编语言中非常重要的概念,它们是计算机内部的存储器件,用于存储数据和执行运算。
常见的寄存器包括通用寄存器、特殊用途寄存器等。
3.2 内存:内存是计算机中用于存储数据和指令的地方,通过内存地址可以读写数据。
在汇编语言中,我们可以直接对内存进行操作。
3.3 标志寄存器:标志寄存器是一种特殊的寄存器,用于存储程序运行过程中的状态信息,比如进位标志、零标志等。
3.4 指令:汇编语言中的指令是用来告诉计算机如何执行任务的,包括数据传输指令、算术运算指令、条件跳转指令等。
本章还介绍了如何使用MASM汇编程序和DosBox仿真器来进行汇编语言程序的编写和调试。
通过实际的代码示例,读者可以更加深入地理解汇编语言的基本概念和编程方法。
总结:《汇编语言程序设计钱晓捷第五版》第一章介绍了汇编语言的基础知识,包括汇编语言的定义、特点以及基本的编程概念。
汇编语言程序设计学习笔记(一)
主题:第一章基础知识(第1-4节)
内容:
第一章概述
本篇我们将学习计算机所使用的机器语言方面的知识,这部分内容虽然比较简易,但是也是学好汇编语言程序的必备知识。
第一节进位记数制与不同基数的数之间的转换
1、基本概念
1)基数:所谓基数,就是表数的数码个数,我们熟悉的十进制数是以10为基数的。
二进制数是基数为2的记数制,以1和0表示不同状态。
二进制数是真正的机器数,能为计算机读懂真正的语言。
2)权:基数的N次方就是相应数码的N阶权,如314=10
⨯0,相应的10的N次幂就是314的N阶权。
二⨯+410
3⨯2+110
进制数用2N表示N阶权。
3)B、D、H:习惯上二进制数后跟一个字母B,十进制数后跟D,十六进制后跟字母H,用于人们区别不同进制的数。
2、二进制数与十进制数之间的转换
1)十进制数转换为二进制数的方法:降幂法和除法,其中降幂法需要熟悉以下几个数字,27=128,28=256,210=1024,等等;除法最常用,除法本质是基数按权展开公式的逆运用,需要注意的是:除法得到的第一个余数代表二进制的最低位数码,不要弄反,另外对于小数
转换的除法实际上乘2求整的过程,第一个整数是小数点后第一位数码。
2)二进制数转化为十进制数的方法:利用基数按权展开公式可以转换。
3、十六进制数及其与二进制、十进制数的转换
1)十六进制数的引进:二进制数的识记对于人们是很不方便的,因此需要一种和二进制数转换容易并且方便人们识记的进制数,这样十六进制数和八进制数就引入了。
2)十六进制H和二进制B之间的转换方法:十六进制数的数码以4位二进制数表示,并且由于基数是16=24,可以方便的实现两种数制转换。
H→B,每位十六进制数转换为4位二进制数,并替换掉原来十六进制进制数即可,如35BFH转换成二进制数为0011010110111111B。
B→H,每4位二进制数转换为1位十六进制数,并替换掉原来二进制数即可,如二进制数1010000110011100B转换成十六进制数为A19CH。
3)十六进制数和十进制数之间的转换方法:和二进制数和十进制数间的转换方法一致,只是把基数从2换到16.
第二节二进制数和十六进制数的运算
1、二进制数运算:
1)加法规则:0+0=0;0+1=1;1+0=1;1+1=0(进位1)
2)乘法规则:0⨯0=0;0 ⨯1=0;1 ⨯0=0;1 ⨯1=1
2、十六进制数的运算:
十六进制的运算可以采用先把该十六进制数转换为十进制数,经过计算后再把结果转换为十六进制的方法,但是这样做比较繁琐。
其实只要按照逢十六进一的规则,直接用十六进制数来计算也是很方便的。
1)十六进制加法:当两个一位数之和S小于16时,与十进制数同样处理,如果两个一位数之和大于或等于16时,则应该用S-16及进位1来取代S。
例:05C3H+3D25H=42E8H
2)十六进制的减法:也与十进制数类似,够减时可直接相减,不够减时服从向高位借1为16的规则。
例:3D25H-05C3H=3762H
3)十六进制的乘法:可用十进制数的乘法规则来计算,但结果必须用十六进制数来表示。
第三节计算机中数和字符的表示
1、原码、反码和补码:
1)二进制数的原码:就是二进制数本身,反码是原码按位取反的结果
2)补码的概念的引入:计算机为什么要使用补码记数?我们知道几何上角A的补角就是(180-A),比如角A=150,那么它的补角就是30,我们记数不仅可通过通过A=150知道,而且也可以通过
(180-30)知道,而且后面的表示往往是更为方便的。
计算机中数码都不是用原码来表示的,而是用它的补码表示
3)求补码的方法:数X的补码=2N-[X]原码,其中2N就相当于上例中的三角和180,N是机器字长。
或者还可以求得X的反码再加一的方法实现。
4)求原码值:假如从计算机中得到一个二进制数,那么它一定是补码形式,可以用3)中的方法的逆过程求的这个数的原码值,即:2N-[x]补码=X的原码
或{[x]补码-1}反码=X的原码
5)正数的补码=它的原码=它的反码,负数的补码使用上述方法求得
6)符号扩展问题,计算机中常会用到符号扩展问题,比如机器字长从8位到16位,16位到32位,那么计算机符号扩展的原则是:正数高位补0
负数高位补1
7)补码表数的范围:N位补码范围是:
-2N-1~2N-1-1
对于8位补码情况,最高位0,低7位表数,最大值为:0111 1111,即27-1=127,最小数为-128,为1000 0000。
2、补码的加减法运算法则
1)两个公式:
[X]补码−
−→
−求补运算[X]补码(1)
−
−求补运算[-X]补码−
−
−→
[X+Y]补码=[X]补码+[Y]补码(2)
[X-Y]补码=[X]补码+[-Y]补码
2)区别补码和求补运算两个概念,如+5的补码就是0000 0101,但是+5的求补运算则是:0000 0101→1111 1010→1111 1011 比如32+(-25)=7,按上面公式计算:
[32+(-25)]补码=[32]补码+[(-25)]补码,利用上面公式(1),可以得到[-25]补码={[25]补码}求补,而25补码就是它本身。
如果把正数求补运算还理解成正数补码就是它本身的话,就会得到[-25]
的错位结论。
实际上 25的补码是:0001 1001 补码=[25]补码
25补码的求补运算是:1110 0110→1110 0111
所以32+(-25)=0010 0000+1110 0111=0000 111=7
3)熟悉ASCⅡ码的字符表示
第四节几种基本的逻辑运算
1、与运算
符号及真值表:∧,A∧B只有一种情况为真,即A,B都真时为真,其他情况为假。
2、或运运算
符号及真值表:∨,A∨B在A.B中有一个为真时即为真,A,B都假时才为假。
3、非运算
符号:---A
4、异或运算
符号及真值表:∀,A∀B在A,B取值相异时为真,相同时为假。
本周要求掌握的内容如下:
基本概念:基数、权、数制、数码的机器表示方式、补码的加减法运算法则、逻辑运算。
基本理论:数制间的转换方法,数码的各种码制间的转换方法,会用补码进行加减运算,熟悉四种逻辑运算真值表。
练习:
1、用降幂法和除法将下列十进制数字转换为二进制数:
(1)369 (2)4095 (3)2.54
2、将下列十六进制数转化为二进制数和十进制数:
(1)FA (2)5B (3)FFFE
3、将下列二进制数转化为十六进制数和十进制数:
(1)101101 (2)10000000 (3)11111111
4、用8位二进制补码计算下列题目,结果用十六进制数表示:
(1)(-85)+76 (2)85+(-76)(3)85-76
5、下列字符的ASCⅡ码是多少,A,a,回车(CR),换行(LF)?。