80X86汇编语言程序设计 第一章基础知识
- 格式:doc
- 大小:20.50 KB
- 文档页数:2
钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.1、简述计算机系统的硬件组成及各部分作用1.2、明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB1.3、什么是汇编语言源程序、汇编程序、目标程序?1.4、汇编语言与高级语言相比有什么优缺点?1.5、将下列十六进制数转换为二进制和十进制表示(1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH1.6、将下列十进制数转换为BCD码表示(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)24581.7、将下列BCD码转换为十进制数(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)000000101.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示(1)0 (2)-127 (3)127 (4)-57(5)126 (6)-126 (7)-128 (8)681.9、完成下列二进制数的运算(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001(5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7)1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?1.12、简述Intel 80x86系列微处理器在指令集方面的发展。
1.13、什么是DOS和ROM-BIOS?1.14、简述PC机最低1MB主存空间的使用情况。
知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。
十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。
8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。
第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。
(2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。
存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。
eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。
已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。
如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。
数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。
零基础入门学习汇编语言第一章基礎知識對底層更好瞭解-硬件之間如何配合,讀取信息-學高級語言會得心應手-用機器的思維去操作計算機理解CPU的運行破解---引言彙編語言是直接在硬件之上工作的編程語言(彙編語言效率高,理論上越高級的語言效率越低,優化另當別論),首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。
(CPU,內存-網卡,顯卡都有內存)編程的平臺是硬件而不是操作系統-在沒有操作系統的環境中直接對硬件編程,體會彙編語言的作用在本章中,对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行。
当课程进行到需要补充新的基础知识(关于编程结构或其他的)时候,再对相关的基础知识进行介绍和探讨。
本书的原则是,以后用到的知识,以后再说。
汇编课程的研究重點:如何利用硬件系統的編程結構和指令集有效靈活地控制系統進行工作。
(學會思維)"深入理解機器工作的基本原理"|"培養底層編程意識和思想"1.1机器语言机器语言是機器指令的集合。
機器指令展开来讲就是一台機器(CPU) 可以正確執行的命令。
一系列二進制數字-計算機將之轉變為一列高低電平,以使計算機的電子器件受到驅動,進行運算。
每一種微處理器都有自己的機器指令集(機器語言)。
指令:01010000 (PUSH AX)电平脉冲:CPU工作原理早期的程序员们将0、1 数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
后来呢,逐渐使用高科技(速度)……但打洞洞是始祖~S = 768 + 12288 - 1280机器码:101100000000000000000011000001010000000000110000001011010000000000000101假如将程序错写成以下这样,请找处错误:101100000000000000000011000001010000000000110000000101101000000000000101在显示器上输出“welcome to masm”。
80x86汇编语言程序设计80x86汇编语言程序设计是一门专门研究如何使用汇编语言在80x86架构的计算机上编写程序的学科。
80x86架构是Intel公司开发的一种微处理器架构,它包括了8086、80286、80386、80486等处理器,以及后来的Pentium系列。
汇编语言是一种低级语言,它与机器语言非常接近,通常用于编写性能要求极高的程序或者进行底层系统开发。
汇编语言基础汇编语言的指令与机器指令一一对应,但使用助记符来代替二进制代码,使得程序更加易于编写和理解。
汇编语言的基本元素包括指令、寄存器、内存地址和立即数。
- 指令:是汇编语言的基本操作单位,用于执行特定的操作,如数据传输、算术运算、逻辑运算等。
- 寄存器:是CPU内部的存储单元,用于快速存取数据。
80x86架构有多个寄存器,包括通用寄存器、段寄存器、指令指针寄存器等。
- 内存地址:是存储在RAM中的数据的位置,汇编语言可以通过内存地址访问和操作数据。
- 立即数:是指令中直接给出的数值,不需要通过寄存器或内存地址访问。
汇编语言指令80x86汇编语言提供了丰富的指令集,用于执行各种操作。
以下是一些基本的指令类型:- 数据传输指令:如MOV(移动数据)、PUSH(将数据压入堆栈)、POP(从堆栈中弹出数据)等。
- 算术指令:如ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等。
- 逻辑指令:如AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR (逻辑异或)等。
- 控制流指令:如JMP(无条件跳转)、JE(等于时跳转)、JNE(不等于时跳转)、LOOP(循环)等。
汇编程序结构一个典型的汇编程序包括以下部分:1. 程序声明:声明程序的名称和起始点。
2. 数据定义:定义程序中使用的数据和常量。
3. 代码段:包含程序的指令和逻辑。
4. 堆栈段:用于存储临时数据和调用函数时的参数。
5. 常量段:定义程序中使用的常量。
6. 外部引用:引用其他程序或库中的代码和数据。
80X86汇编语言程序设计
第一章基础知识(1.2.)
一.进制转换:
(1)十进制转换成二进制:除2取余法
(2)十进制转换成十六进制:除16取余法
(3)二进制转换成十进制:权的展开式,各位二进制数码乘以与其对应的权之和
(4)十六制转转换成十进制:权的展开式,各位十六进制数码乘以与其对应的权之和
(5)二进制转换成十六进制:四位归一法(8421码),把二进制数码从低位到高位每4位组成一组,直接用十六进制数来表示
(6)十六进制转换成二进制:一位分四法(8421码),把十六进制数中的每一位用4位二进制数表示,就形成相应的二进制数
二.数据的表示
(1)数的补码表示(有符号数)
把一个数连同其符号在内在机器中的表示加以数值化,这样的数称为机器数。
一般用最高有效位来表示数的符号。
正数用0表示,负数用1表示。
机器数可以用不同的码制来表示,常用的有原码、补码和反码表示法。
补码表示法中,正数采用符号绝对值表示;负数X用2的n次方-X来表示,其中n位机器的字长。
0的补码就是00000000
8位表示数的有符号整数的范围为:-128~+127.
16位表示数的有符号整数的范围为:-32768~+32767.
例如:机器字长为16位,写出N=-117D的补码表示
+117D可表示为:0000 0000 0111 0101
按位求反后为: 1111 1111 1000 1010
末位加1后为: 1111 1111 1000 1011
十六进制数为: F F 8 B
N=-117D的补码是FF8BH
(2)无符号数
8位表示数的无符号整数的范围为:0~255(256-1).
16位表示数的无符号整数的范围为:0~65535(65536-1).
(3)符号扩展
当要扩展的数是无符号数时,只要在最高位前扩展(m-n)个0。
如果要扩展的数是有符号数,并且采用补码形式表示,进行符号扩展。
(正数前面用0补齐;负数
最高有效位如果是1,前面就加1。
)
(4)补码的加法和减法
求一个正数的补码表示按位求反后再在末位加1,可以得到此正数相应的负数的补码表示。
把这种对一个二进制数按位求反后在末位加1的运算成为求补运算。
【X】补——【-X】补——【X】补
补码的加法规则是:
【X+Y】补=【X】补+【Y】补
-【X-Y】补=【X】补+【-Y】补
非数值数据:
1.ASCII码(7位=128个字符)(8位=256字符)
数字:30~39H
大写字母:41~5AH
小写字母:61~7AH
控制字符:00~19H
2.变形国际码
基本数据类型
1.字节
2.字
3.双字
4.字符串。