emacs自定义工具栏
(setq tool-bar-map (make-sparse-keymap))
要自定义工具栏,只需要修改tool-bar-map这个变量就可以了,一般我们可以用tool-bar-add-item这个函数来往tool- bar-map里添加工具项。
tool-bar-add-item的原型是这样的:
(tool-bar-add-item icon def key &rest props)
参数icon设置工具图标,emacs的工具栏可以使用XPM和PBM格式的图标,当emacs 有libxmp支持时会使用XPM格式,没有libxmp库时会寻找PBM格式的图标(Info上还说有XBM格式,我没搞清楚什么情况下使用XBM)。
在etc/images目录下可以看到emacs自带的图标一般都同时有XPM和PBM两种格式,就是为了在没有libxmp库时也能显示工具栏,因为如果我们只有xpm格式的图标而没有libxmp库时,emacs就不在工具栏上显示这个项了。所以我们自己做图标时最好XPM和PBM都准备一份。
icon参数的类型是字符串,只需要传主文件名就可以,扩展名emacs会自己加,比如对图标文件semantic.xpm写成”semantic”。
emacs会在image-load-path下查找图标文件,这个变量的值默认为(“…/etc/images/” data-directory load-path),就是说它除了查找image目录外还会查找所有的load-path,所以如果我们有自己的图标目录,把它加到image- load-path或者load-path都可以。
图标的大小好像没有限制,emacs本身使用的图标是24×24像素的,如果使用了比它大的图标,整个工具栏会自动扩大。
参数def设置这个工具项被按下的执行什么命令,它的格式跟global-set-key里的command格式是一样的。
参数key用来给这个工具项指定一个key,这个key用于唯一标识这个工具项,所以在同一个keymap里key不能重复。
剩下的参数可以设置一些属性项,具体可以设置哪些属性可以看Info > elisp > Keymaps > Menu Keymaps > Defining Menus > Extended Menu Items。常用的几个属性有:
* :enable 这个属性的值是一个表达式,emacs对这个表达式求值,如果值为nil时,这个工具项会被禁用。
* :visible 这个属性控制这个工具项是否显示,它的类型与:enable是一样的。
* :help 这个属性类型是字符串,当鼠标在工具项上停留时会显示这个字符串。
其余的属性我没用过,也没仔细研究它们用来干什么。
举例来说,如果要添加一个工具项用来执行gdb命令,并且只有在c-mode或者c++-mode时才让它有效,可以这样:
(tool-bar-add-item "gud/run" 'gdb 'gdb
:enable '(memq major-mode '(c++-mode c-mode)))
这样会把gdb这个工具项添加到默认工具栏的最后,如果不想要emacs默认的工具栏,可以先执行(setq tool-bar-map (make-sparse-keymap))把默认的工具栏清空。
2010年6月10日星期四
2010年5月29日星期六
什么是寄存器?
寄存器定义
寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令 寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个 “8 位元寄存器”或 “32 位元寄存器”。寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出 来。
寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。更适当的是称他们为 “架构寄存器”。
例如,x86 指令及定义八个 32 位元寄存器的集合,但一个实作 x86 指令集的 CPU 可以包含比八个更多的寄存器。
寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。
寄存器用途
1.可将寄存器内的数据执行算术及逻辑运算;
2.存于寄存器内的地址可用来指向内存的某个位置,即寻址;
3.可以用来读写数据到电脑的周边设备。
数据寄存器
8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。
(1)通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个).
数据寄存器分为:
AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄 存器与外界设备传送数据.
BH&BL=BX(base):基址寄存器,常用于地址索引;
CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.
DH&DL=DX(data):数据寄存器,常用于数据传递。
他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。
另一组是指针寄存器和变址寄存器,包括:
SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;
BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;
SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;
DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。
这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。
(2) 指令指针IP(Instruction Pointer)
指令指针IP是一个16位专用寄存器,它指向当前需要取出的指令字节,当BIU从内存中取出一个指令字节后,IP就自动加1,指向下一个指令字节。注 意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。
(3)标志寄存器FR(Flag Register)
8086有一个18位的标志寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。
OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值 被清为0。
DF:方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
IF:中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断 所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:
(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
TF:跟踪标志TF。该标志可用于程序调试。TF标志没有专门的指令来设置或清楚。
(1)如果TF=1,则CPU处于单步执行指令的工作方式,此时每执行完一条指令,就显示CPU内各个寄存器的当前值及CPU将要执行的下一条指令。
(2)如果TF=0,则处于连续工作模式。
SF:符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。 运算结果为正数时,SF的值为0,否则其值为1。
ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
AF:下列情况下,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。
PF:奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
CF:进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。)
4)段寄存器(Segment Register)
为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:
CS(Code Segment):代码段寄存器;
DS(Data Segment):数据段寄存器;
SS(Stack Segment):堆栈段寄存器;
ES(Extra Segment):附加段寄存器。
当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。 所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。
以上是8086寄存器的整体概况, 自80386开始,PC进入 。
32bit时代,其寻址方式,寄存器大小, 功能等都发生了变化, 要想学习这方面知识请参考相应资料。
寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令 寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个 “8 位元寄存器”或 “32 位元寄存器”。寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出 来。
寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。更适当的是称他们为 “架构寄存器”。
例如,x86 指令及定义八个 32 位元寄存器的集合,但一个实作 x86 指令集的 CPU 可以包含比八个更多的寄存器。
寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。
寄存器用途
1.可将寄存器内的数据执行算术及逻辑运算;
2.存于寄存器内的地址可用来指向内存的某个位置,即寻址;
3.可以用来读写数据到电脑的周边设备。
数据寄存器
8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。
(1)通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个).
数据寄存器分为:
AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄 存器与外界设备传送数据.
BH&BL=BX(base):基址寄存器,常用于地址索引;
CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.
DH&DL=DX(data):数据寄存器,常用于数据传递。
他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。
另一组是指针寄存器和变址寄存器,包括:
SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;
BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;
SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;
DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。
这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。
(2) 指令指针IP(Instruction Pointer)
指令指针IP是一个16位专用寄存器,它指向当前需要取出的指令字节,当BIU从内存中取出一个指令字节后,IP就自动加1,指向下一个指令字节。注 意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。
(3)标志寄存器FR(Flag Register)
8086有一个18位的标志寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。
OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值 被清为0。
DF:方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
IF:中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断 所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:
(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
TF:跟踪标志TF。该标志可用于程序调试。TF标志没有专门的指令来设置或清楚。
(1)如果TF=1,则CPU处于单步执行指令的工作方式,此时每执行完一条指令,就显示CPU内各个寄存器的当前值及CPU将要执行的下一条指令。
(2)如果TF=0,则处于连续工作模式。
SF:符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。 运算结果为正数时,SF的值为0,否则其值为1。
ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
AF:下列情况下,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。
PF:奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
CF:进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。)
4)段寄存器(Segment Register)
为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:
CS(Code Segment):代码段寄存器;
DS(Data Segment):数据段寄存器;
SS(Stack Segment):堆栈段寄存器;
ES(Extra Segment):附加段寄存器。
当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。 所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。
以上是8086寄存器的整体概况, 自80386开始,PC进入 。
32bit时代,其寻址方式,寄存器大小, 功能等都发生了变化, 要想学习这方面知识请参考相应资料。
标签:
Assemble
段寄存器
段寄存器是因为对内存的分段管理而设置的。16位CPU有四个段寄存器,所以,其程序可同时访问四个不同含义的段。
段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。
段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另外,当偏移量用到了指针寄存器BP,则其缺省的段 寄存器也是SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶。
段寄存器DS指向数据段,ES指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到存储单元的物理地址。该偏移量可以是具体数值、符号地址 和指针寄存器的值等之一,具体情况将由指令的寻址方式来决定。
通常,缺省的数据段寄存器是DS,只有一个例外,即:在进行串操作时,其目的地址的段寄存器规定为ES。当然,在一般指令中,我们还可以用强置前缀的 方法来改变操作数的段寄存器。
“可选用的段寄存器”即是可以用强置说明这些段寄存器的值来作为其操作数地址的段地址。
段寄存器:在8086系统中,访问存储器的地址码由段地址和段内偏移地址两部分组成。段寄存器用来存放各分段的逻 辑基值,并指示当前正在使用的4个逻辑段,包括代码段寄存器CS、堆栈段寄存器SS、数据段寄存器DS和附加段数据寄存器ES。
1, 代码段寄存器CS:存放当前正在运行的程序代码所在段的段基值,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提 供。
2, 数据段寄存器DS:指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基值。
3, 堆栈段寄存器SS:指出当前堆栈的底部地址,即存放堆栈段的段基值。
4, 附加段寄存器ES:指出当前程序使用附加数据段的段基址,该段是串操作指令中目的串所在的段。
标签:
Assemble
8086汇编语言的基本语法
1. 汇编语言结构
1)标识符
用来对程序中的变量、常量、段、过程等 进行命名,它是组成语句的一个常用成分,它的命名应符合下列规定:
① 标识符是一个字符串,第一个字符必须是字母、“?”、“@”、或下划线“—”这四种字符中的一个;
② 从第二个开始,可以是字母、数字、“?”、“@”、“—”;
③ 一个标识符的长度可以由1~31个字符组成。
注意点:不能使用系统 中已经定义过的符号,如寄存器名、分支条件用标志、助记符、定义等等。
2. 语句类型与结构
有三种类型:
指令性语句:是机器指 令的符号表示,经汇编程序汇编后能产生对应的机器指令代码,在形成执行文件时执行;
指示性语句(也称伪指令语句):知识给 汇编程序提供一些控制信息,帮助汇编程序正确汇编指令性语句,在汇编时被执行,没有对应的机器码;
宏指令语句:是指令性语句和指示性语句 的复合体,是按照一定规则,根据用户需要定义的新指令;在汇编时被展开,在形成执行文件时执行其展开体。
1)指令性语句结构
[标号:][前缀] 指令助记符 [操作数][;注释]
说明:
① 方括号表示的成分可以选用或缺省;
② 标号是后面紧跟“:”的一个标识符,标号代表该行指令在存储器中的首地址,标号可作为转移指令和调用指令的一个操作数;
③ 前缀如重复前缀、总线封锁前缀等;
④ 指令助记符
⑤ 操作数可以是一个、两个或没有,由指令类型决定,若有两个操作数,前面为目的操作数,后面为源操作数,中间用逗号隔开;
⑥ 注释是以“;”开始的字符串,不影响程序的汇编与执行,仅用于增加源程序的可读性。
2)指示性语句结构
[名字] 伪指令助记符 [操作数][;注释]
说明:
① 名字可以是符号常量名、变量名、过程名、段名等,名字后面不能有“:”;
② 伪指令命令助记符 共有40多个,按功能不同分成八类,本章介绍的常用五类共20多个;
③ 操作数可少到一个没有,多到两个以上,操作数之间须用逗号分隔;
3)宏指令语句结构
[宏名] 宏操作助记符 [操作数][;注释]
说明:
① 宏名即宏指令名,是一标识符,宏名后面不能有“:”;
② 宏操作助记符共有8个,分别是MACRO、ENDM、EXITM、LOCAL、REPT、IRPC、IRP、PURGE;
③ 其余同指示性语句。
3. 汇编语言源程序结构
汇编语言源程序是以模块为单位独立汇编 的。一个完整的源程序,至少由一个模块组成。
较大的应用程序可由多个模块组成,每个 模块具有不同的功能,把这些模块分别汇编成目标代码后,再用连接程序把它们连接成一个可执行程序。
一 个源程序模块又分成若干个段。
标签:
Assemble
ASM——学习3
段寄存器
8086CUP在访问内存时要有相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。
CS and IP
CS和IP事8086CP中最关键的寄存器,他们指示了CPU当前要读取指令的地址,CS为代码段寄存器。IP为指令指针寄存器。
小结
1、段地址在8086CPU的段寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU由4个段寄存器,其中CS 用来存放指令的段地址。
2、CS存放指令的地址,IP存放指令的偏移地址。
3、8086CPU工作流程:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP指向下一条指令;
(3)执行指令。(转到步骤①,重复这个过程)
4、8086CPU提供转移指令修改CS:IP的内容。
8086CUP在访问内存时要有相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。
CS and IP
CS和IP事8086CP中最关键的寄存器,他们指示了CPU当前要读取指令的地址,CS为代码段寄存器。IP为指令指针寄存器。
小结
1、段地址在8086CPU的段寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU由4个段寄存器,其中CS 用来存放指令的段地址。
2、CS存放指令的地址,IP存放指令的偏移地址。
3、8086CPU工作流程:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP指向下一条指令;
(3)执行指令。(转到步骤①,重复这个过程)
4、8086CPU提供转移指令修改CS:IP的内容。
标签:
Assemble
ASM 学习2
各类存储器芯片
这些存储芯片从物理连接上看是独立的,不同的器件。从读写属性上看分为两类:随机存储器(RAM)和 只读存储器(ROM)。
随机存储器可读可写,但必须带点存储,关机后存储的内容丢失。只读存储器只能读取不能写入,关机后其中的内容不丢失。
存储器从功能和连接上又可分为以下3类:
1、随机存储器
2、装有BIOS(Basic Input/Output System,基本输入/输出系统)的ROM
3、接口卡上的RAM
内存地址空间
在物理上是独立的器件,但是在以下两点上相同。
1、都和CPU的总线连接
2、CPU对它们进行读写的时候都通过控制线发出内存读写命令
寄存器
一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。
在CPU中:
运算器进行信息处理;
寄存器进行信息存储;
控制器控制各种器件进行工作;
内部总线连接各种器件,在他们之间进行数据的传输;
8086CPU有14个寄存器:
每个寄存器都有一个名称分别为:AX BX CX DX SI DI SP BP IP CS SS DS ES PSW.
8086CPU所有寄存器都是6位的,可以存放两个字节。AX BX CX DX 这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。
这4个寄存器都可分为两个可独立使用的8位寄存器来使用:
1、AX可分为AH和AL;
2、BX可分为BH和BL;
3、CX可分为CH和CL;
4、DX可分为DH和DL。
这些存储芯片从物理连接上看是独立的,不同的器件。从读写属性上看分为两类:随机存储器(RAM)和 只读存储器(ROM)。
随机存储器可读可写,但必须带点存储,关机后存储的内容丢失。只读存储器只能读取不能写入,关机后其中的内容不丢失。
存储器从功能和连接上又可分为以下3类:
1、随机存储器
2、装有BIOS(Basic Input/Output System,基本输入/输出系统)的ROM
3、接口卡上的RAM
内存地址空间
在物理上是独立的器件,但是在以下两点上相同。
1、都和CPU的总线连接
2、CPU对它们进行读写的时候都通过控制线发出内存读写命令
寄存器
一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。
在CPU中:
运算器进行信息处理;
寄存器进行信息存储;
控制器控制各种器件进行工作;
内部总线连接各种器件,在他们之间进行数据的传输;
8086CPU有14个寄存器:
每个寄存器都有一个名称分别为:AX BX CX DX SI DI SP BP IP CS SS DS ES PSW.
8086CPU所有寄存器都是6位的,可以存放两个字节。AX BX CX DX 这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。
这4个寄存器都可分为两个可独立使用的8位寄存器来使用:
1、AX可分为AH和AL;
2、BX可分为BH和BL;
3、CX可分为CH和CL;
4、DX可分为DH和DL。
标签:
Assemble
ASM基础学习笔记第一节
1、什么是寄存器?和寄存器代号?
寄存器,简单讲是指CPU中可以存储数据的器件。
一个CPU有多个寄存器,如AX代表一个寄存器的代号,BX是另一个寄存器的代号。
2、汇编语言的组成?
汇编语言是由,汇编指令、伪指令、其他符号3部分组成。
汇编语言的核心是汇编指令,它决定汇编语言的特性。
汇编指令是机器码的助记符,由对应的机器码。
伪指令是没有对应的机器码的,由编译器识别,计算机不执行。
其他符号如+、-、*、/等,由编译器识别,没有对应的机器码。
3、储存器被划分成若干个储存单元,每个储存单元从0开始顺序编号。
4、CPU进行数据的读写的3大类信息交互?
储存单元的地址(地址信息)
器件的选择,读或写的指令(控制信息)
读或写的数据(数据信息)
5、CPU通过什么将地址、数据和控制信息传到储存器芯片的呢?
电子计算机能处理、传输的信息都是电信号,电信号由导线传输。在计算机中有专门链接CPU和其他芯片的导线,通常称为总线。(总线从物理上讲就是一根根导 线的集合)
根据信息传输不同,总线从逻辑上分为3大类:地址总线、控制总线、数据总线。
本节总结
(1)汇编指令是机器指令的助记符,同机器指令一一对应。
(2)每一种CPU都有自己的汇编指令集。
(3)CPU开源直接使用的信息在存储器中存放。
(4)在存储器中指令和数据没有任何区别,都是二进制信息。
(5)存储单元从0开始顺序排列编号。
(6)一个存储单元开源存储8个bit,即8位二进制数。
(7)1byte=8bit 1kb=1024b 1mb=1024kb 1g=1024mb.
(8)每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个CPU可以引出3中总线的宽度标志了这个CPU的不同地方的 性能:
地址总线的宽度决定了CPU的寻址能力。
数据总线的宽度决定了CPU的其他器件进行数据传送时的一次数据传输量。
控制总线的宽度决定了CPU对系统中的其它器件的控制能力。
寄存器,简单讲是指CPU中可以存储数据的器件。
一个CPU有多个寄存器,如AX代表一个寄存器的代号,BX是另一个寄存器的代号。
2、汇编语言的组成?
汇编语言是由,汇编指令、伪指令、其他符号3部分组成。
汇编语言的核心是汇编指令,它决定汇编语言的特性。
汇编指令是机器码的助记符,由对应的机器码。
伪指令是没有对应的机器码的,由编译器识别,计算机不执行。
其他符号如+、-、*、/等,由编译器识别,没有对应的机器码。
3、储存器被划分成若干个储存单元,每个储存单元从0开始顺序编号。
4、CPU进行数据的读写的3大类信息交互?
储存单元的地址(地址信息)
器件的选择,读或写的指令(控制信息)
读或写的数据(数据信息)
5、CPU通过什么将地址、数据和控制信息传到储存器芯片的呢?
电子计算机能处理、传输的信息都是电信号,电信号由导线传输。在计算机中有专门链接CPU和其他芯片的导线,通常称为总线。(总线从物理上讲就是一根根导 线的集合)
根据信息传输不同,总线从逻辑上分为3大类:地址总线、控制总线、数据总线。
本节总结
(1)汇编指令是机器指令的助记符,同机器指令一一对应。
(2)每一种CPU都有自己的汇编指令集。
(3)CPU开源直接使用的信息在存储器中存放。
(4)在存储器中指令和数据没有任何区别,都是二进制信息。
(5)存储单元从0开始顺序排列编号。
(6)一个存储单元开源存储8个bit,即8位二进制数。
(7)1byte=8bit 1kb=1024b 1mb=1024kb 1g=1024mb.
(8)每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个CPU可以引出3中总线的宽度标志了这个CPU的不同地方的 性能:
地址总线的宽度决定了CPU的寻址能力。
数据总线的宽度决定了CPU的其他器件进行数据传送时的一次数据传输量。
控制总线的宽度决定了CPU对系统中的其它器件的控制能力。
标签:
Assemble
ASM-Debug练习
什么是Debug?
Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它可以查看CPU各种寄存器中的内容、内存情况和在机器码级跟踪 程序的运行。
Debug常用命令
用Debug的R命令查看、改变CPU寄存器的内容
用Debug的D命令查看内存中的内容
用Debug的E命令改写内存中的内容
用Debug的U命令将内存中的机器指令翻译成汇编指令
用Debug的T命令执行一条机器指令
用Debug的A命令以汇编指令的格式在内存中写入一条机器指令
进入DOS或在WINDOWS下CMD直接DEBUG
-r查看寄存器的内容
改变寄存器的内容
-r ax修改AX寄存器的内容在:后面写入要修改为的值
-d查看内存中的内容
可以根据段地址加偏移地址指定查询。如-D 1000:9从1009开始显示直到1000:88,1000:0-1000:8的内容不显示。
-e用来改写内存中的内容 -e 1000:0 1 2 3 4 5 'a' 'b' 'c' 注意'a'字符修改后是ASCII的对应 修改后-d 1000:0 8查看的8位 从0开始直到第8的一个就不显示了。可以用f字母代替。修改内存的内容时可以用字符串,不过写进内存的是字符的对应ASCII的值,从字符串的第一个字母 开始。
-u查看内存中机器码的含义,用T来执行内存中的机器码
-e 1000:0 b8 01 00 b9 02 00 01 c8
-u 1000:0 对应的汇编 mov ax,0001 mov cx,0002 add ax,cx add[bx+si],al ........各自的机器内存上的东西不一样后面的结果也有点变化。
-a以汇编指令的形式在内存中写入机器指令
mov ax,1
mov bx,2
mov cx,3
add ax,bx
add ax,cx
add ax,ax
Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它可以查看CPU各种寄存器中的内容、内存情况和在机器码级跟踪 程序的运行。
Debug常用命令
用Debug的R命令查看、改变CPU寄存器的内容
用Debug的D命令查看内存中的内容
用Debug的E命令改写内存中的内容
用Debug的U命令将内存中的机器指令翻译成汇编指令
用Debug的T命令执行一条机器指令
用Debug的A命令以汇编指令的格式在内存中写入一条机器指令
进入DOS或在WINDOWS下CMD直接DEBUG
-r查看寄存器的内容
改变寄存器的内容
-r ax修改AX寄存器的内容在:后面写入要修改为的值
-d查看内存中的内容
可以根据段地址加偏移地址指定查询。如-D 1000:9从1009开始显示直到1000:88,1000:0-1000:8的内容不显示。
-e用来改写内存中的内容 -e 1000:0 1 2 3 4 5 'a' 'b' 'c' 注意'a'字符修改后是ASCII的对应 修改后-d 1000:0 8查看的8位 从0开始直到第8的一个就不显示了。可以用f字母代替。修改内存的内容时可以用字符串,不过写进内存的是字符的对应ASCII的值,从字符串的第一个字母 开始。
-u查看内存中机器码的含义,用T来执行内存中的机器码
-e 1000:0 b8 01 00 b9 02 00 01 c8
-u 1000:0 对应的汇编 mov ax,0001 mov cx,0002 add ax,cx add[bx+si],al ........各自的机器内存上的东西不一样后面的结果也有点变化。
-a以汇编指令的形式在内存中写入机器指令
mov ax,1
mov bx,2
mov cx,3
add ax,bx
add ax,cx
add ax,ax
标签:
Assemble
订阅:
博文 (Atom)