文档视界 最新最全的文档下载
当前位置:文档视界 › 汇编语言知识点

汇编语言知识点

汇编语言知识点
汇编语言知识点

第一章

十进制与二进制之间的转换(P2)

降幂法

除法

十进制与六进制之间的转换(P5)

降幂法

除法

补码表示:正数:采用符号—绝对值法

负数:先写出对应的正数的补码表示,然后再将其按位数求反,最后末尾加1,就可以得到负数的补码表示

补吗运算:二进制数按位求反后在末尾加1

第二章

一、存储容量

1K = 1024 =210 (Kilo)1M =1024K = 220 (Mega)

1G = 1024M = 230 (Giga)

1个二进制位:bit (比特)8个二进制位:Byte(字节)1Byte = 8bit

2个字节:1 Word (字)1Word = 2Byte = 16bit

二、存储单元地址和内容

1.存储器以字节(8 bit)为编程单位

2.每个字节单元都有唯一的地址编码

3.地址用无符号整数来表示(编程用十六进制表示)

4.一个字要占用相继的两个字节

5.低位字节存入低地址,高位字节存入高地址

6.字单元地址用它的低地址来表示

7.机器以偶地址访问(读/ 写)存储器

三、物理地址= 16 段地址+ 偏移地址

四、存储器的分段:

20 根地址线:地址范围00000H ~ FFFFFH (1MB)

机器字长16位:仅能表示地址范围0000H ~ FFFFH (64KB)

小段:每16个字节为一小段,共有64K个小段

段起始地址:小段首地址

段的大小:64K 范围内的任意字节

五、存储器的逻辑分段优点:

允许程序在存储器内重定位;

允许实模式程序在保护模式下运行;

有利于程序和数据的分离。

六、中央处理器8086/8088寄存器组:

通用寄存器

数据寄存器:AX,BX,CX,DX

变址寄存器:SI、DI

指针寄存器:SP、BP

控制寄存器:IP、FLAGS

段寄存器:CS、DS、SS、ES

七、标志寄存器( FLAGS / PSW )

条件标志位:OF 溢出标志SF符号标志ZF 零标志

CF 进位标志AF 辅助进位标志PF奇偶标志

控制标志位:DF 方向标志IF中断标志TF 陷阱标志

八、寄存器与存储器的比较:

寄存器:在CPU内部;访问速度快;容量小,成本高;用名字表示;没用地址

存储器:在CPU外部;访问速度慢;容量大,成本低;用地址表示;地址可用各种方式形成

第三章

九、数据传送指令

传送指令MOV CPU内部寄存器之间的数据传送

指令格式:MOV DST, SRC 执行操作:(DST) ←(SRC)

注意: *DST、SRC 不能同时为段寄存器MOV DS, ES ?

* DST、SRC 不能同时为存储单元

*立即数不能直接送段寄存器MOV DS, 2000H ?

* DST 不能是立即数和CS

*不影响标志位

交换指令XCHG

指令格式:XCHG OPR1, OPR2 执行操作:(OPR1) ?(OPR2)

例:XCHG BX, [ BP+SI ] XCHG AL, BH

注意: * 两个操作数字长一致

* 两个操作数都不能是段寄存器

* 两个操作数都不能是立即数

* 两个操作数不能同时是存储单元

* 可以采用除立即寻址方式外的任何一种寻址方式。

* 不影响标志位

地址传送指令LEA、LDS、LES

1.有效地址送寄存器指令:LEA REG, SRC 执行操作:(REG) ← SRC

2.指针送寄存器和DS指令:LDS REG, SRC 执行操作:(REG) ←(SRC)

(DS) ← (SRC+2) 相继二字→寄存器、DS

3.指针送寄存器和ES指令:LES REG, SRC 执行操作:(REG) ←(SRC)

(ES) ←(SRC+2) 相继二字→寄存器、ES

注意:* 源操作数必须为存储器操作数

* 目的操作数必须是一个16位通用寄存器,不能是段寄存器

* 源操作数可以是除立即寻址和寄存器寻址以外的任意一种寻址方式

* 不影响标志位

堆栈操作指令PUSH、POP

1.进栈指令:PUSH SRC

执行操作:(SP) ←(SP) – 2 ( (SP)+1, (SP) ) ←(SRC)

出栈指令:POP DST

执行操作:(DST) ←( (SP)+1, (SP) ) (SP) ←(SP) + 2

堆栈:‘先进后出’的存储区,段地址存放在SS中,SP在任何时候都指向栈顶,进出栈后自动修改SP。

注意:* 堆栈操作必须以字为单位。

* 不影响标志位

* 不能用立即寻址方式PUSH 1234H ?

* DST不能是CS POP CS ?

标志操作指令

LAHF、SAHF、PUSHF、POPF 、CLC、STC、CMC、CLD、STD、LI、STI

标志传送指令:

1.标志送AH指令:LAHF 执行操作:(AH) ← (FLAGS的低字节)

2.AH送标志寄存器指令:SAHF 执行操作:(FLAGS的低字节) ←(AH)

注意: * LAHF不影响标志位* SAHF影响CF、PF、AF、ZF、SF

标志进栈指令:PUSHF

执行操作:(SP) ←(SP) - 2 ( (SP)+1, (SP) ) ←(FLAGS)

标志出栈指令:POPF

执行操作:(FLAGS) ← ( (SP)+1, (SP) ) (SP) ←(SP) + 2

注意:PUSHF和POPF经常一起联用,完成保护、维护标志寄存器的内容或改变标志位的值。

标志位操作指令:

清进位标志指令CLC CF ←0

置进位标志指令STC CF ← 1

进位标志取反指令CMC CF ←CF

清方向标志指令CLD DF ←0

置方向标志指令STD DF ← 1

清中断允许标志指令CLI IF ←0

置中断允许标志指令STI IF ← 1

注意: * 只影响本指令指定的标志

十、加减法指令:

加法指令:ADD DST, SRC 执行操作:(DST) ←(SRC) + (DST)

带进位加法指令:ADC DST, SRC 执行操作:(DST) ←(SRC) + (DST) + CF

加1指令:INC OPR 执行操作:(OPR) ←(OPR) + 1

注意: * 除INC指令不影响CF标志外,均对状态标志位有影响。

各加法指令对条件标志位的影响:

SF=1,结果为负ZF=1,结果为0 CF=1,和的最高有效位有向高位的进位

OF=1,两个操作数符号相同,而结果符号与之相反

CF 位表示无符号数相加的溢出。

OF 位表示带符号数相加的溢出。

减法指令:SUB DST, SRC 执行操作:(DST) ←(DST) - (SRC)

带借位减法指令:SBB DST, SRC 执行操作:(DST) ←(DST) - (SRC) - CF

减1指令:DEC OPR 执行操作:(OPR) ← (OPR) - 1

求补指令:NEG OPR 执行操作:(OPR) ←- (OPR)

比较指令:CMP OPR1, OPR2 执行操作:(OPR1) - (OPR2)

各减法指令对条件标志位(CF/OF/ZF/SF)的影响:

CF=1,被减数的最高有效位有向高位的借位或CF=1减数转换为加法运算时无进位

OF=1 两个操作数符号相反,而结果的符号与减数相同

CF 位表示无符号数减法的溢出。

OF 位表示带符号数减法的溢出。

NEG 指令对CF/OF的影响

CF=0,操作数为0 OF=1,操作数为-128(字节运算)或-32727(字运算

十一、乘除运算指令

无符号数乘法指令:MUL SRC 带符号数乘法指令:IMUL SRC

执行操作:字节操作数(AX) ←(AL) * (SRC)

字操作数(DX, AX) ←(AX) * (SRC)

注意: * 目的操作数必须是累加器

* AL (AX) 为隐含的乘数寄存器。* AX (DX,AX) 为隐含的乘积寄存器。

* SRC不能为立即数。* 除CF和OF外,对条件标志位无

乘法指令对CF/OF 的影响:

MUL指令: CF,OF =00乘积的高一半为零

11否则

IMUL指令: CF,OF =00乘积的高一半是低一半的符号扩展

11否则

例:(AX) = 16A5H,(BX) = 0611H

(1) MUL BX ; (DX, AX) ←(AX) * (BX)

; 16A5*0611=0089 5EF5

; (DX)=0089H (AX)=5EF5H CF=OF=1

(2) IMUL BL ; (AX) ←(AL) * (BL)

; A5*11 ? 5B*11=060B ? F9F5

; (AX) = 0F9F5H CF=OF=1

无符号数除法指令:DIV SRC

带符号数除法指令:IDIV SRC

执行操作:字节操作(AL) ← (AX) / (SRC) 的商(AH) ← (AX) / (SRC) 的余数字操作(AX) ← (DX, AX) / (SRC) 的商(DX) ← (DX, AX) / (SRC) 的余数

注意: * AX (DX,AX) 为隐含的被除数寄存器。

* AL (AX) 为隐含的商寄存器。* AH (DX) 为隐含的余数寄存器。

* SRC不能为立即数。* 对所有条件标志位均无定义。

十二、类型转换指令

CBW AL → AX

执行操作:若(AL)的最高有效位为0,则(AH)= 00H,若(AL)的最高有效位为1,则(AH)= FFH CWD AX → (DX,AX)

执行操作:若(AX)的最高有效位为0,则(DX)= 0000H,若(AX)的最高有效位为1,则(DX)= FFFFH

例:(AX) = 0BA45H

CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H

注意: * 无操作数指令* 隐含对AL 或AX 进行符号扩展* 不影响条件标志位

十三、逻辑运算指令

逻辑非指令:NOT OPR * OPR不能为立即数

执行操作:(OPR) ←(OPR) * 不影响标志位

逻辑与指令:AND DST, SRC 执行操作:(DST) ←(DST) ∧ (SRC)

逻辑或指令:OR DST, SRC 执行操作:(DST) ←(DST) ∨ (SRC)

异或指令:XOR DST, SRC 执行操作:(DST) ←(DST) ? (SRC)

测试指令:TEST OPR1, OPR2 执行操作:(OPR1) ∧ (OPR2)

十四、移位指令

逻辑左移SHL OPR, CNT

逻辑右移SHR OPR, CNT

算术左移SAL OPR, CNT(同逻辑左移)

算术右移SAR OPR, CNT

循环左移ROL OPR, CNT

循环右移ROR OPR, CNT

带进位循环左移RCL OPR, CNT

带进位循环右移RCR OPR, CNT

注意: * OPR可用除立即数以外的任何寻址方式

* CNT=1,SHL OPR, 1

CNT>1,MOV CL, CNT SHL OPR, CL ; 以SHL为例* 条件标志位:

CF = 移入的数值 1 CNT=1时,最高有效位的值发生变化

0 CNT=1时,最高有效位的值不变

移位指令:SF、ZF、PF 根据移位结果设置,AF无定义

循环移位指令:不影响SF、ZF、PF、AF

十五、控制转移指令:

?无条件转移指令JMP

?条件转移指令

JZ / JNZ 、JE / JNE、JS / JNS、JO / JNO、

JP / JNP、JB / JNB、JL / JNL、JBE / JNBE、

JLE / JNLE、JCXZ

?循环指令LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE

?子程序调用和返回指令CALL、RET

?中断与中断返回指令INT、INTO、IRET

十六、与转移地址有关的寻址方式:

用来确定转移指令及转子指令的转向地址

段内寻址段内直接寻址JMP NEAR PTR NEXT

段内间接寻址JMP TABLE [ BX ]

段间寻址段间直接寻址JMP FAR PTR NEXT

段间间接寻址JMP DWORD PTR [ BX ]

无条件转移指令:

段内直接短转移:JMP SHORT OPR

执行操作:(IP) ←(IP) + 8位位移量

段内直接近转移:JMP NEAR PTR OPR

执行操作:(IP) ←(IP) + 16位位移量

段内间接转移:JMP WORD PTR OPR

执行操作:(IP) ←(EA)

段间直接远转移:JMP FAR PTR OPR

执行操作:(IP) ←OPR 的段内偏移地址(CS) ←OPR 所在段的段地址段间间接转移:JMP DWORD PTR OPR

执行操作:(IP) ←(EA) (CS) ←(EA+2)

注意:* 不影响标志位

十七、条件转移指令

注意:* 只能使用段内直接寻址的8 位位移量* 不影响标志位

(1) 根据单个条件标志的设置情况转移

格式测试条件

JZ(JE) OPR ZF = 1

JNZ(JNE) OPR ZF = 0

JS OPR SF = 1

JNS OPR SF = 0

JO OPR OF = 1

JNO OPR OF = 0

JP OPR PF = 1

JNP OPR PF = 0

JC OPR CF = 1

JNC OPR CF = 0

(2) 比较两个无符号数,并根据比较结果转移

格式测试条件

<JB (JNAE,JC) OPR CF = 1

≥JNB (JAE,JNC) OPR CF = 0

≤JBE (JNA) OPR CF∨ZF = 1

>JNBE (JA) OPR CF∨ZF = 0

* 适用于地址或双精度数低位字的比较

(3) 比较两个带符号数,并根据比较结果转移* 适用于带符号数的比较

格式测试条件

<JL (JNGE) OPR SF?OF = 1

≥JNL (JGE) OPR SF?OF = 0

≤JLE (JNG) OPR (SF?OF)∨ZF = 1

>JNLE (JG) OPR (SF?OF)∨ZF = 0

(4) 测试CX 的值为0 则转移

格式测试条件

JCXZ OPR (CX)=0

十八、循环指令

注意:* CX 中存放循环次数

* 只能使用段内直接寻址的8 位位移量* 不影响标志位

LOOP

LOOPZ / LOOPE

LOOPNZ / LOOPNE

执行步骤:(1) (CX) ←(CX) – 1

(2)检查是否满足测试条件,如满足则(IP) ←(IP) + 8位位移量,实行循环;不满足则IP 不变,退出循环

循环指令:LOOP OPR

测试条件:(CX) ≠ 0

为零或相等时循环指令:LOOPZ(LOOPE) OPR

测试条件:ZF=1 且(CX) ≠ 0

不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR

测试条件:ZF=0 且(CX) ≠ 0

十九、例:求首地址为ARRA Y 的M 个字之和,结果存入TOTAL MOV CX, M

MOV AX, 0

MOV SI, AX

AGAIN:

ADD AX, ARRAY[SI]

ADD SI, 2

LOOP AGAIN

MOV TOTAL, AX

二十、串处理指令

?串处理指令?串重复前缀

LODSB / LODSW REP

STOSB / STOSW REPE / REPZ

MOVSB / MOVSW REPNE / REPNZ

SCASB / SCASW

CMPSB / CMPSW

LODS 从串取指令:

LODS SRC

LODSB (字节)

LODSW (字)

执行操作:字节操作:(AL)←((SI)), (SI)←(SI)±1

字操作:(AX)←((SI)), (SI)←(SI)±2

注意: * LODS 指令一般不与REP 联用

* 源串一般在数据段中(允许使用段跨越前缀来修改),

目的串必须在附加段中

* 不影响条件标志位

STOS 存入串指令:

STOS DST

STOSB (字节)

STOSW (字)

执行操作:字节操作:((DI))←(AL), (DI)←(DI)±1

字操作:((DI))←(AX), (DI)←(DI)±2

MOVS 串传送指令:

MOVS DST, SRC

MOVSB (字节)

MOVSW (字)

例:MOVS ES: BYTE PTR [DI], DS: [SI]

执行操作:(1) ((DI)) ←((SI))

(2) 字节操作:(SI)←(SI)±1, (DI)←(DI)±1

字操作:(SI)←(SI)±2, (DI)←(DI)±2

方向标志DF=0 时用+ ,DF=1 时用- 。

SCAS 串扫描指令:

SCAS DST

SCASB (字节)

SCASW (字)

执行操作:字节操作:(AL) - ((DI)), (DI)←(DI)±1

字操作:(AX) - ((DI)), (DI)←(DI)±2

CMPS 串比较指令:

CMPS SRC, DST

CMPSB (字节)

CMPSW (字)

执行操作:(1) ((SI)) - ((DI))根据比较结果置条件标志位:相等ZF=1;不等ZF=0

(2) 字节操作:(SI)←(SI)±1, (DI)←(DI)±1

字操作:(SI)←(SI)±2, (DI)←(DI)±2

REP (与MOVS / STOS配合工作)

执行操作:(1) 如(CX)=0 则退出REP,否则转(2)

(2) (CX) (CX) -1

(3) 执行MOVS / STOS / LODS

(4) 重复(1) ~ (3)

REP MOVS:将数据段中的整串数据传送到附加段中。

源串(数据段)→目的串(附加段)

执行REP MOVS 之前,应先做好:

(1) 源串首地址(末地址)→SI

(2) 目的串首地址(末地址)→DI

(3) 串长度→CX

(4) 建立方向标志( CLD 使DF=0,STD 使DF=1 )

REPE / REPZ

REPNE / REPNZ (与CMPS 和SCAS配合工作)

执行操作:(1) 如(CX)=0 或ZF=0 (ZF=1) 则退出串操作,否则转(2)

(2) (CX)←(CX) -1

(3) 执行CMPS / SCAS

(4) 重复(1) ~ (3)

例:从一个字符串中查找一个指定的字符

mess db ‘COMPUTER’

lea di, mess

mov al, ‘T’

mov cx, 8

cld

repne scasb

例:比较两个字符串,找出它们不相匹配的位置

lea si, mess1

lea di, mess2

mov cx, 8

cld

repe cmpsb

例:反向传送

lea si, mess1+7

lea di, mess2+7

mov cx, 8

STd

rep movsb

第四章

二十一、标号和变量

(1)标号和变量都是标识符。

标识符组成:字母a~z ,数字0~9,专用字符? . @ _ $

标识符的组成规则:最大长度为31,第一个字符不能是数字,不区分字母的大小写,不能是汇编语言的保留字

(2)标号和变量的异同:

不同:

标号:用于汇编指令语句中,以冒号结束,在代码段中定义,经常在转移指令或call指令变量:用于伪指令语句中,不允许有冒号,在数据段或附加段中定义,经常在操作数字段出现

相同:都有三种属性:段属性、偏移属性、类型属性

二十二、伪操作

是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。

处理器选择伪操作段定义伪操作

程序开始和结束伪操作数据定义及存储器分配伪操作

表达式赋值伪操作地址计数器与对准伪操作

基数控制伪操作

二十三、段定义伪操作

data segment ; 定义数据段

data ends

;----------------------------------------

extra segment ; 定义附加段

extra ends

;----------------------------------------

code segment ; 定义代码段

assume cs:code, ds:data, es:extra

start: mov ax, data

mov ds, ax ; 段地址 段寄存器

code ends

end start

说明:语句序列

段假定伪指令ASSUME

格式:ASSUME 段寄存器名:段名(这里只是一种指明,段寄存器的实际值,必须在程序中使用传送指令来赋值,cs除外)

二十四、

数据定义及存储器分配伪操作:

[变量] 助记符操作数[ , 操作数, …] [ ; 注释]

助记符:DB DW DD DF DQ DT

例:DA TA_BYTE DB 10,4,10H,?

DA TA_WORD DW 100,100H,-5,?

LABEL 伪操作:name LABEL type

例:BYTE_ARRAY LABEL BYTE

WORD_ARRAY DW 50 DUP (?)

tos LABEL WORD

表达式名EQU 表达式

ALPHA EQU 9

BETA EQU ALPHA+18

BB EQU [BP+8]

说明:1、AB EQU DA TA_ONE+2 (表达式中的标号和变量要先定义,例如:DA TA_ONE)

2、“ = ”伪操作(允许重复定义)

……

EMP = 7

……

EMP = EMP+1

……

数值回送操作符:OFFSET、SEG、TYPE、LENGTH、SIZE

OFFSET / SEG 变量/ 标号

功能:回送变量或标号的偏址/ 段址

功能:回送由DUP定义的变量的单元数,其它情况回送1

SIZE 变量

功能:LENGTH * TYPE

例:

ARRAY DW 100 DUP (?)

TABLE DB ‘ABCD’

ADD SI, TYPE ARRAY ; ADD SI, 2

ADD SI, TYPE TABLE ; ADD SI, 1

MOV CX, LENGTH ARRAY ; MOV CX, 100

MOV CX, LENGTH TABLE ; MOV CX, 1

MOV CX, SIZE ARRAY ; MOV CX, 200

MOV CX, SIZE TABLE ; MOV CX, 1

属性操作符:PTR、段操作符、SHORT、THIS、HIGH、LOW 类型PTR 表达式MOV WORD PTR [BX], 5

段操作符MOV ES: [BX], AL

SHORT 标号JMP SHORT NEXT

THIS 类型TA EQU THIS BYTE

TD DW 1234H

NEXT EQU THIS FAR

MOV AX,2

HIGH和LOW CONS EQU 1234H

MOV AH, HIGH CONS

MOV AL, LOW CONS

第五章

二十五、分支程序设计

(1) 条件控制

(2) 逻辑尺控制

(3) 地址跳跃表(值与地址有对应关系的表)

第六章

二十六、CALL 调用指令

段内直接近调用:CALL DST

执行操作:(SP) ←(SP) - 2

( (SP)+1,(SP) ) ←(IP)

(IP) ←(IP) + 16位位移量

段内间接近调用:CALL DST

执行操作:(SP) ←(SP) - 2

( (SP)+1,(SP) ) ←(IP)

(IP) ←(EA)

段间直接远调用:CALL DST

执行操作:(SP) ←(SP) - 2

( (SP)+1,(SP) ) ←(CS)

(SP) ←(SP) - 2

( (SP)+1,(SP) ) ←(IP)

(IP) ←偏移地址

(CS) ←段地址

段间间接远调用:CALL DST

执行操作:(SP) ←(SP) - 2

( (SP)+1,(SP) ) ←(CS)

(SP) ←(SP) - 2

( (SP)+1,(SP) ) ←(IP)

(IP) ←(EA)

(CS) ←(EA+2)

RET 返回指令

段内近返回:RET

执行操作:(IP) ←( (SP)+1,(SP) )

(SP) ←(SP) + 2

段内带立即数近返回:RET EXP

段间远返回:RET

执行操作:(IP) ←( (SP)+1,(SP) )

(SP) ←(SP) + 2

(CS) ←( (SP)+1,(SP) )

(SP) ←(SP) + 2

段间带立即数远返回:RET EXP

二十七、过程定义伪操作

过程名PROC NEAR ( FAR )

过程名ENDP

(1)NEAR属性:调用程序和子程序在同一代码段中(段内调用)(2)FAR属性:调用程序和子程序不在同一代码段中(段间调用)二十八、子程序调用与返回

子程序调用:隐含使用堆栈保存返回地址

call near ptr subp

(1) 保存返回地址(2) 转子程序

call far ptr subp

(1) 保存返回地址(2) 转子程序

子程序返回:ret

二十九、保存与恢复寄存器

subt proc far

push ax

push bx

push cx

push dx

……

……

pop dx

pop cx

pop bx

pop ax

ret

subt endp

三十、子程序参数传递

(1) 通过寄存器传送参数

(2) 通过存储器传送参数

(3) 通过地址表传送参数地址

(4) 通过堆栈传送参数或参数地址

(5) 多个模块之间的参数传送

第七章

三十一、宏:源程序中一段有独立功能的程序代码。

宏指令:用户自定义的指令。在编程时,将多次

使用的功能用一条宏指令来代替。

宏与子程序的区别

宏定义、宏调用和宏展开

宏定义:macro_name MACRO [哑元表] ; 形参/虚参

[LOCAL 标号表]

……

…… ; 宏定义体

ENDM

宏调用:(必须先定义后调用)

macro_name [实元表] ; 实参

宏展开:汇编程序把宏调用展开

宏定义体复制到宏指令位置,实参代虚参

LOCAL中的标号??0000~??ffff

三十二、宏定义中的参数

用参数代表自定义符号和数值

用参数代表指令例如:定义将某存储区清零的宏指令

用参数代替寄存器名字例如:定义将任一个寄存器循环左移或右移n位的宏指令

用参数代表任何一个字符串或者子字符串例如:定义两个多精度数据求和的宏定义

三十三、宏汇编操作符:& ;; %

符号1 & 符号2 宏展开时,合并前后两个符号形成一个符号。

;; 注释宏展开时,;;后面的注释不予展开。

% 表达式汇编程序将%后面的表达式转换为数字,并在展开期间用这个数取代哑元。第九章

三十四、中断指令:INT TYPE 或INT

执行操作:(SP) ←(SP) – 2 ( (SP)+1,(SP) ) ←(FLAGS)

(SP) ←(SP) – 2 ( (SP)+1,(SP) ) ←(CS)

(SP) ←(SP) – 2 ( (SP)+1,(SP) ) ←(IP)

(IP) ←(TYPE*4) (CS) ←(TYPE*4+2)

溢出中断指令:INTO

执行操作:若OF=1,(IP) ←(10H) (CS) ←(12H)

三十五、从中断返回指令:IRET

执行操作:(IP) ←( (SP)+1,(SP) )

(SP) ←(SP) + 2

(CS) ←( (SP)+1,(SP) )

(SP) ←(SP) + 2

(FLAGS) ←( (SP)+1,(SP) )

(SP) ←(SP) + 2

注意:

* TYPE (0~255) 是中断类型号, 隐含的类型号为3

* INT 指令还把IF 和TF 置0,但不影响其它标志位

* IRET 指令执行完,标志位由堆栈中取出的值确定

三十六、BIOS和DOS基本调用

调用方法:

1、将调用参数装入指定的寄存器中;

2、BIOS或DOS功能号装入AH;

3、如需子功能号,把它装入AL;

4、按中断号调用DOS或BIOS中断(INT);

5、检查或取得返回参数。

三十七、Dos显示功能中断int 21h

AH 功能调用参数

2 显示一个字符(检验Ctrl-Break) DL = 字符

6 显示一个字符(不检验Ctrl-Break) DL = 字符

9 显示字符串DS:DX=串地址串必须以$结束,

汇编语言 快速入门

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%&“醒醒!” 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指

《计算机应用基础》各章知识点归纳大全

第一章《计算机基础知识》知识点归纳 1.一般认为,世界上第一台电子数字计算机诞生于1946年。 2.计算机当前已应用于各种行业、各种领域,而计算机最早的设计是针对科学计算。 3.计算机有多种技术指标,其中决定计算机的计算精度的是字长_。 4.自计算机问世至今已经经历了四个时代,划分时代的主要依据是计算机的电子器件。 5.世界上第一台电子数字计算机采用的逻辑元件是电子管。 6.早期的计算机体积大、耗能高、速度慢,其主要原因是制约于电子器件。 7.当前的计算机一般被认为是第四代计算机,它所采用的逻辑元件是大规模集成电路。 8.个人计算机属于微型计算机。 9.计算机可以进行自动处理的基础是存储程序。 10.计算机进行数值计算时的高精确度主要决定于基本字长。 11.计算机具有逻辑判断能力,主要取决于编制的软件。 12.计算机的通用性使其可以求解不同的算术和逻辑问题,这主要取决于计算机的可编程性。 13.计算机的应用范围很广,下列说法中正确的是辅助设计是用计算机进行产品设计和绘图。 14.当前计算机的应用领域极为广泛,但其应用最早的领域是科学计算。 15.最早设计计算机的目的是进行科学计算,其主要计算的问题面向于军事。 16.计算机应用中最诱人、也是难度最大且目前研究最为活跃的领域之一是人工智能。 17.气象预报已广泛采用数值预报方法,这种方法涉及计算机应用中的科学计算和数据处理。 18.利用计算机对指纹进行识别、对图像和声音进行处理属于的应用领域是信息处理。 19.计算机最主要的工作特点是存储程序与自动控制。 20.用来表示计算机辅助设计的英文缩写是CAD。 21.利用计算机来模仿人的高级思维活动称为人工智能 22.计算机网络的目标是实现资源共享和信息传输。 23.所谓的信息是指处理后的数据 24.时至今日,计算机仍采用程序内存或称存储程序原理,原理的提出者是冯·诺依曼。 25.冯·诺依曼计算机的基本工作原理是程序存储。 26.计算机系统中,最贴近硬件的系统软件是操作系统_。 27.计算机程序设计语言中,可以直接被计算机识别并执行的是机器语言。

汇编语言基础练习题目

、填空 1. 在8086/8088的计算机中,存储单元的20位物理地址由两部分组成,即16 位的 段地址 和16位的 偏移地址,物理地址=段地址X 10H+偏移量。 2. 段的起始地址必须是某小段的首地址,它能被 10H 整除。 3. 已知01020H 字单元的内容为6A58H 请分别写出它的两个字节单元的地址和 内容: (01020H =58H, ( 01021H =6AH 4. 指令执行后,若标志寄存器的ZF=0,则表示结果不为0;若SF=0,则表示结 果的符号是正号,即结果为正数。 5. 控制器从存储器取出一条指令后,指令指针寄存器IP 的内容是 将要执行的下 一条指令开始的偏移地址。 6. 段地址和偏移地址为1000: 127B 的存储单元的物理地址是1127BH 解:由物理地址=段地址X 10H+偏移量的公式可得 物理地址=1000HX 10H+127BH=10000H+127BH=1127BH 、选择 1. 与CS 寄存器组合才能形成代码段的物理地址的寄存器是 解:16K 个字单元,即为32K 个字节单元。由于2的15次方为32K,因此至 少需要15位二进制数才能表示16K 个字单元。 3. 已知一数据段的段地址是0100H,这个段的第6个字单元的物理地址是(B ) o 解:由于一个字单元占用两个字节,第一个字单元的偏移地址为 0000H,因 此第一个字单元的物理地址为 01000H 。以后每一个字单元的地址在前一个的基 C )。 A. SP 寄存器 B. BP 寄存器 C. IP 寄存器 D. BX 寄存器 2.如果存储器分段时, 的二进制数至少是( 一个段最多允许16K 个字单元,那么表示该段内偏移地址 A )o A.15 位 位 B.16 位 C.17 位 D.18 A. 01010H B. 0100AH C.01012H D.01006H

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

微机原理与接口技术知识点复习总结汇编

第一章计算机基础知识 本章的主要内容为不同进位计数制计数方法、不同进位制数之间相互转换的方法、数和字符在计算机中的表示方法、简单的算术运算以及计算机系统的组成。下边将本章的知识点作了归类,图1为本章的知识要点图,图1.2为计算机系统组成的示意图。 本章知识要点 数制 二进制数(B) 八进制数(Q) 十六进制数(H) 十进制数(D) B) 码制 带符号数编码 奇偶校验码 字符编码 原码 反码 补码 ASCII码 BCD码 压缩BCD码 非压缩BCD码计算机系统组成 计算机系统组成硬件 主机 外部设备 中央处理器(CPU) 半导体存储器 控制器 运算器 ROM RAM 输入设备 输出设备 软件 系统软件 应用软件 操作系统:如DOS、Windows、Unix、Linux等 其他系统软件 用户应用软件 其他应用软件 各种计算机语言处理软件:如汇编、解释、编译等软件

第二章8086微处理器 本章要从应用角度上理解8086CPU的内部组成、编程结构、引脚信号功能、最小工作模式的系统配置、8086的存储器组织、基本时序等概念。下面这一章知识的结构图。 本章知识要点 Intel 8086微处理器 时钟发生器(8284) 地址锁存器(74LS373、8282) 存储器组织 存储器逻辑分段 存储器分体 三总线(DB、AB、CB) 时序 时钟周期(T状态) 基本读总线周期 系统配置 (最小模式) 8086CPU 数据收发器(8286、74LS245) 逻辑地址物理地址 奇地址存储体(BHE) 偶地址存储体(A0) 总线周期指令周期 基本写总线周期 中断响应时序 内部组成 执行单元EU(AX、BX、CX、DX、SP、BP、SI、DI、标志寄存器) 总线接口单元BIU(CS、DS、SS、ES、IP) 地址/数据 控制 负责地址BHE/S7、ALE 引脚功能(最小模式)地址/状态 数据允许和收发DEN、DT/R 负责读写RD、WR、M/IO 负责中断INTR、NMI、INTA 负责总线HOLD、HLDA 协调CLK、READY、TEST 模式选择MN/MX=5V

汇编语言复习题(带答案)

汇编语言复习题(带答案) 汇编语言期末复习题 第1章:基础知识 1、在汇编语言程序的开发过程中使用宏功能的顺序是(C)。DX A、宏定义,宏调用 B、宏定义,宏展开 C、宏定义,宏调用,宏展开 D、宏定义,宏展开,宏调用 2、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句 中不可省略的项是(B)。DX A、名字项 B、操作项 C、操作数项 D、注释项 3、可屏蔽中断就是它的请求是否被CPU响应要受(IF)的控制。DX 4、使用LINK连接命令,执行后可生成文件的扩展名为(EXE)。DX 5、在寄存器间接寻址中,如果指令中指定的寄存器为BP,则操作数在段中,段地址 在SS寄存器中。TK 6、注释项用于说明程序段或是一条和几条指令的功能,一般用;(或分号)表示注释 的开始。TK 7、DOS系统功能调用方式为:(1)置入口参数;(2)中断程序编号送AH寄存器后执行INT21H。TK 8、通常主程序和子程序间参数传送的方法有三种:用寄存器传递、用存储单元传递、用堆栈传递(顺序可调换)。TK 9、CPU暂停当前程序的执行,转而执行处理紧急事务的程序,并在该事务处理完后能自动恢复执行原先程序的过程。在此,称引起紧急事务的事件为中断源。TK 10、在字符串操作指令中,DS∶SI指向源串,ES∶DI指向目的串。TK 11、计算机系统通过接口与外围设备通信。TK 12、键盘I/O、显示I/O和打印I/O分别对应、和号中断。TK 13、字符显示模式缓冲区中的一个字对应于屏幕上的一个字符。每个字的第一个字节 为显示字符的ASCII码,第二个字节为显示字符的属性。TK 14、简述上机运行汇编语言程序的过程。JD

完整word版,汇编语言期末考试试题及

汇编语言模拟试题及答案 一,单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.指令JMP FAR PTR DONE属于参考答案为:C A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 [解析]略 2.下列叙述正确的是参考答案为:C A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS 指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP 指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL 指令 D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用 JAE/JNB指令 [解析]对于无符号数和有符号数的比较都采用CMP指令; CMPS指令是串比较指令; 对两个无符号数的条件转移指令应是:JAE、JNB、JBE、JNA;对两个有符号数的条件转移指令应是:JGE、JNL、JLE、JNG。

3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是参考答案为:C A.12CSBH B.12B6BH C.12C59H D.12BFEH [解析]末字与首字相隔(128-1=)127个字,且每个字占用2个字节,因此末字单元的物理地址应为: 首字单元的物理地址+(128-1)×2 即12ABH×10H+00ABH+(128-1)×2=12C59H。 4.在下列指令的表示中,不正确的是参考答案为:C A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL [解析]当只有一个存储器操作数时,这个操作数的类型不明确,例如选项C 中的[BX],没有明确的说明访问该存储单元的类型,此时存储器操作数就必须需用类型说明,如 DEC BYTE PTR [BX]或DEC WORD PTR [BX] 但是在题目的选项C中,没有指出存储器操作数类型,所以该指令是不正确的;而其它选项中的指令均是正确的。5.在进行二重循环程序设计时,下列描述正确的是参考答案为:AA.外循环初值应置外循环之外;内循环初值应置内

计算机基础知识知识点归纳

计算机基础知识知识点归纳: 1、世界上第一台电子计算机诞生于 1946年 世界第一台电子计算机的英文名称是。(答案O A.ENIAC B.IBM https://www.docsj.com/doc/2b7568784.html, D.PC ' 世界第一台电子计算机于 _____________ 年诞生。(答案:B ) A.1940 B.1946 C.1960 D.1980 .体系。(答案:B ) A.比尔?盖茨 B.冯?诺依曼 C.唐纳德?希斯 D.温?瑟夫 2、世界上首次提出存储程序计算机体系结构的是 B _ 型计算机。 B 冯?诺依曼 C 温?瑟夫 D 唐纳德?希斯 【计算机的特点】 1.处理速度快 '现代计算机的运算速度可以达到每秒钟数千亿次 (通常以每秒钟完成基本加法指令的数目来 '表示计算机的运算速度),这不仅使得许多大型数据处理工作时间大大缩短,促成了天气预 '报、数值模拟等技术的广泛应用,更使得许多实时控制、在线检测等处理速度要求较高的工 '作得以实现。同时,计算机具有很高的逻辑运算速度, 这使得计算机在非数值数据领域中得 '到了广泛的应用。 ' 2 .运算精度高 '计算机一般都有十几位甚至更多位的有效数字,加上先进的算法,可得到很高的计算精度。 '例如,对圆周率n 的计算,在没有计算机的情况下, 数学家要经过长期的努力才能算到小数 '点后500多位,而使用第一台计算机仅仅用了 40秒钟就打破了这一记录。 ' 3 .具有逻辑运算和记忆能力 :计算机的存储器具有存储数据和程序的功能, 它可以存储的信息量越来越大。计算机不仅可 '以进行算术运算,而且可以进行逻辑运算,可以对文字、符号等进行判断、比较,因而可解 '决各种不同类型的问题。 ' 4 .具有自动控制能力 '计算机内部的操作、 运算是在程序的控制下自动进行的, 它能够按照程序规定的步骤完成指 定的任务,而不需要人工干预。 ' 5 .通用性强 '计算机是靠存储程序控制进行工作的。 在不同的应用领域中, 只要编写和运行不同的应用软 :件,计算机就能在任一领域中很好地完成工作。针对不同的需要, 设计不同的程序,这就能 '使计算机具有很强的通用性。 'I 计算机的特点有 A.运算速度快 B.具有逻辑判断功能 C.存储容量大 D.计算精度高 【计算机的发展历程】 1.第一代:电子管计算机(1946年—1958年) 1946 年 2 月,世界上第一台电子数字计算机 ENIAC (Electronic Numerical Integrator And 现代的计算机系统都属于 冯?诺依曼 现代计算机时 A 比尔?盖茨 。(答案:ABCD )

汇编语言程序设计练习题

汇编语言程序设计练习题 一、字符与串处理类 1.逆序输出字符串“BASED ADDRESSING”。 2.试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。 3.编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 4.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。 5.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。)放在STRING中,试编制一个程序测试字符串中是否存在数字。如有,则把CL的第5位置1,否则将该位置置0。 6.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。),将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。 7.试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。 8.试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MATCH”。 9.试编写一段程序,要求输入两个字符串,如两个字符串相等则显示“MATCH”, 否则显示“NO MATCH”。 10.试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。 11.在内存区域0B800:0000-0B800:0FFFF(都是16进制数)内查找首地址为SOURCE的串(SOURCE的首字节为串长度),如果找到,则把AL的第0位置0,否则将该位置置1。 12.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中。 13.在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一个程序:在数组中查找该数,如果找到此数,则把它从数组中删除。 二、数字输入输出类 1. 试编制一个程序,把BX寄存器内的二进制数以十六进制数的形式在屏幕上显示出来。 2. 试编制一个程序,把BX寄存器内的二进制数以八进制数的形式在屏幕上显示出来。 3. 试编制一个程序,把BX寄存器内的二进制数以十进制数的形式在屏幕上显示出来。 4.从键盘上输入2个一位数,求出它们的和(假设和不超过1位)。 5.试编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 6.试编写一段程序,从键盘接收一个0-65535间的十进制无符号数,并在终端上显示与它等值的二进制数。 7.试编写一段程序,从键盘接收一个-32768-32767间的十进制有符号数,并在终端上显示与它等值的二进制数。 8.编写一个程序,从键盘输入一个0~65535之间的10进制无符号数,然后以16进制

汇编语言程序设计 知识点 V3.0

第一章 1、什么是汇编语言? 2、汇编语言程序设计过程:编辑源程序,编译(汇编),连接,运行调试 3、汇编语言特点?与机器语言一一对应,直接操作硬件,高效率(空间和时间,运行速度快,目标代码短,占用存储空间少) 4、数制转换 第2章8086计算机组织结构 1、计算机硬件系统组成:CPU、存储器、输入输出设备。 2、CPU组成:运算器、控制器、寄存器,运算器和控制器由芯片设计时设计好,不可做任何改动,程序设计员仅能在程序里使用寄存器,寄存器都有相应的名字,如AX,能在程序里直接使用寄存器是汇编语言区别于高级语言的最重要特点,这样就可以直接控制硬件系统。 3、总线结构:数据总线、地址总线、控制总线。数据总线分8位、16位、32位和64位等,多少位机就是以数据总线来划分,比如8位机、32位机。8086机是16位机,但地址总线是20位,地址总线数量决定了内存寻址空间的大小,如8086有20位地址线,那么寻址空间是:220=210*1K=1M,8086最大寻址空间为1MB,即地址范围:00000H~FFFFFH。控制总线主要传送控制信息,如读写操作,读写操作的主体是CPU,读操作是指CPU从内存或外设读取数据,写操作是指CPU把数据写到内存或外设中。 4、存储器:存储器的最小单元是字节(Byte,由8个位组成),字节的多少就是存储器的容量。每一个字节单元都有一个唯一的编号,这个编号就是字节单元的地址,此地址就是物理地址,对于8086而言,编号的形式为:XXXXXH,如85421H。如果要读写存储器,必须知道某一个字节单元的地址。多个字节单元可以组合成更大的单元(数),比如2个字节单元组合成一个字(Word),4个字节单元组合成一个双字(Double Word)等,规定:这个组合后的大单元是以最小字节单元地址为自己的地址。如85421H字节单元内容为12H,85422H 字节单元内容为34H,那么以85421H地址的字单元的内容就是3412H。 地址取最小字节单元的地址为大单元的地址。 内容排序按照“高高低低”原则:高字节放在高地址里,低字节放在低地址里。 详细请参看2.3节(P30页) 5、8086CPU寄存器 (1)通用类:AX(AH,AL)、BX(BH,BL)、CX(CH,CL)、DX(DH,DL) (2)段寄存器类:CS、DS、ES、SS (3)与偏移地址相关类:SI、DI、SP、BP (4)特殊类:IP、FLAGS 所有寄存器都是16位大小,通用类的16位又可看成2个8位的寄存器组成,区分为高8位(High)和低8位(Low),因此取名为AH和AL,其他类似。 CS:存放代码段段地址,DS:存放数据段段地址,SS:存放堆栈段段地址,ES:存放数据附加段段地址,一般作为DS的辅助使用,比如在一段程序里需要用到2个不同数据段的数据时,其中一个数据段段地址存放在DS中,另一个存放在ES中。 SI、DI:一般用于变址寻址方式,如[BX+SI]、[BX+DI], SP:堆栈段中堆栈栈顶的偏移地址,不可修改,由SS:SP逻辑地址始终指向堆栈的栈顶。 详细参看2.3.2,P32页 BP:一般也用于堆栈,可以作为SP的备份,通常也是用SS:BP逻辑地址表示,BP可以随意修改,因此通过SS:BP可以访问堆栈的任何地方。此外,BP还与BX一样,可以作为基地址

汇编语言练习题

一、单项选择题(共20题) 1.对于有符号的数来说,下列哪个值最大() A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是()A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.设A=0.4H,B=0.8H,C=0.4,D=0.4Q,它们之间的关系是( )。 A.C+D=B B.A+D=B C.B=D D.A>C>D 4.下列四个寄存器中,可作为十六位寄存器的是( ) A.DL B.CL C.BP D.EBX 5.8088/8086存储器分段,每个段不超过() A.64K个字 B. 32K个字节 C.1兆个字节 D.64K个字节6.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式() A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 7.连接程序把汇编语言源程序生成的目标文件(.OBJ文件)转换成( )。 A..OBJ文件B..EXE文件

C..LST文件D..CRF文件 8.在程序运行过程中,确定下一条指令的物理地址的计算表达式是( )。 A. (CS)×16+(IP) B. (DS)×16+(DI) C. (SS)×16+(SP) D.(ES)×16+(SI) 9.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 10.8086/8088系统执行传送指令MOV时() A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 11.执行下列程序后,(AL)=( )H。 DATA SEGMENT TAB DB ‘0123456789’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX, DATA MOV DS, AX MOV BX, OFFSET TAB MOV AL, 04 XLAT TAB …

汇编语言复习题

汇编语言复习题 第2章8086CPU寄存器的结构及使用 1.8086CPU由指令执行部件EU和总线接口部件BIU两部分组成。其中EU的功能是控制和执行指令,主要由算术逻辑部件ALU、EU控制部件、8个16位寄存器和一个标志寄存器FLAGS组成。BIU的功能是从存储器预取指令和数据,以及所有EU需要的总线操作,实现CPU与存储器和外设间信息传递。BIU由指令队列、指令指针寄存器、段寄存器、地址加器组成。 2.Intel 8086CPU共有14个16位寄存器,它们分别是通用寄存器8个即AX、BX、CX、DX、SP、BP、SI、DI,其中能用作寄存器间接寻址的寄存有BX、BP、SI和DI,控制寄存器2个即IP、PSW,段寄存器4个即DS、SS、CS和ES它们的含义分别是: 其中在编程过程中程序的段基值由汇编程序装入的段寄存器是SS和CS ,由编程者用汇编指令将段基值装入的段寄存器是DS和ES,其具体指令是MOV AX,数据段段/附加数据段名,MOV DS/ES,AX,编程人员不能用指令去取其值或给其设置给定值的寄存器是 IP ,但是可以通过某些指令的执行而自动修改其内容,如JMP NEXT指令的功能是将目的地址的偏移量送入IP。 3.PSW是程序状态字寄存器又称为标志寄存器,用来反映微处理器在程序运行时的某些状态,其中的6个状态标志位分别是OF、SF、ZF、AF、PF和CF,反映了刚执行完算术或逻辑运算指令后的某些特征。三个控制标志位是DF即方向标志、IF即中断标志位和TF陷阱标志。如两个8位的二进制数相加其状态标志位中各标志的值是多少?10110101+10011011。 4.8086CPU数据总线16根地址总线是20根能访问的最大存储空间是1MB。 第3章存储器的分段 1.在8086CPU中存储器的编址原则是按字节编址即每一个字节单元是一个存储器地址,在源程序中用常用十六进制数或符号来表示一个存储单元的地址。任何相邻的两个字节地址可以构成一个字地址,约定用较小的那个地址来表示字地址。程序员在编程时所用的地址称为逻辑地址,CPU访问的地址称为物理地址。物理地址与逻辑地址的关系是:物理地址=段基值*16+偏移地址。如有下列存储器的结构请按要求回答问题: ① 0002H的字节地址的内容是多少? ② 0002H的字地址的内容是多少? ③若该存储地址所在的数据段的段基值是0F3BH,则逻辑地址 为0004H的物理地址是多少?该物理地址的字单元内容是多少? ④物理地址是0F3B1H的字节单元内容是多少?

汇编语言期末考试试题及答案

汇编语言模拟试题及答案 一,单项选择题 (在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20 分) 1.指令JMP FAR PTR DONE 属于参考答案为:C A .段内转移直接寻址 B ?段内转移间接寻址 C .段间转移直接寻址 D ?段间转移间接寻址 [解析]略 2.下列叙述正确的是参考答案为:C A ?对两个无符号数进行比较采用CMP 指令,对两个有符号数比较用CMPS 指令 B ?对两个无符号数进行比较采用CMPS 指令,对两个有符号数比较用CMP 指令 C .对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL 指令 D .对无符号数条件转移采用JGE/JNL 指令,对有符号数条件转移用JAE/JNB 指令 [解析]对于无符号数和有符号数的比较都采用CMP 指令; CMPS 指令是串比较指令; 对两个无符号数的条件转移指令应是:JAE、JNB、JBE、JNA;对两个有符号数的条件转 移指令应是:JGE、JNL、JLE、JNG。 3.一个有128个字的数据区,它的起始地址为12ABH:00ABH ,请给出这个数 据区最末一个字单元的物理地址是参考答案为:C A . 12CSBH B . 12B6BH C. 12C59H D . 12BFEH [解析]末字与首字相隔(128- 1 =) 127个字,且每个字占用2个字节,因此末字单元的物理地址应为: 首字单元的物理地址+( 128 —1) >2 即12ABHX 10H + OOABH +( 128 —1) X2 = 12C59H。 4.在下列指令的表示中,不正确的是参考答案为:C A . MOV AL ,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D . MUL CL [解析]当只有一个存储器操作数时,这个操作数的类型不明确,例如选项C中的 [BX] ,没有明确的说明访问该存储单元的类型,此时存储器操作数就必须需用类型说明,如DEC BYTE PTR [BX] 或DEC WORD PTR [BX] 但是在题目的选项C 中,没有指出存储器操作数类型,所以该指令是不正确的;而其它选项中的指令均是正确的。 5.在进行二重循环程序设计时,下列描述正确的是参考答案为:A A .外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内 B ?外循环初值应置外循环之内;内循环初值应置内循环之内 C ?内、外循环初值都应置外循环之外

汇编语言知识点

第一章 十进制与二进制之间的转换(P2) 降幂法 除法 十进制与六进制之间的转换(P5) 降幂法 除法 补码表示:正数:采用符号—绝对值法 负数:先写出对应的正数的补码表示,然后再将其按位数求反,最后末尾加1,就可以得到负数的补码表示 补吗运算:二进制数按位求反后在末尾加1 第二章 一、存储容量 1K = 1024 =210 (Kilo)1M =1024K = 220 (Mega) 1G = 1024M = 230 (Giga) 1个二进制位:bit (比特)8个二进制位:Byte(字节)1Byte = 8bit 2个字节:1 Word (字)1Word = 2Byte = 16bit 二、存储单元地址和内容 1.存储器以字节(8 bit)为编程单位 2.每个字节单元都有唯一的地址编码 3.地址用无符号整数来表示(编程用十六进制表示) 4.一个字要占用相继的两个字节 5.低位字节存入低地址,高位字节存入高地址 6.字单元地址用它的低地址来表示 7.机器以偶地址访问(读/ 写)存储器 三、物理地址= 16 段地址+ 偏移地址 四、存储器的分段: 20 根地址线:地址范围00000H ~ FFFFFH (1MB) 机器字长16位:仅能表示地址范围0000H ~ FFFFH (64KB) 小段:每16个字节为一小段,共有64K个小段 段起始地址:小段首地址 段的大小:64K 范围内的任意字节 五、存储器的逻辑分段优点: 允许程序在存储器内重定位; 允许实模式程序在保护模式下运行; 有利于程序和数据的分离。 六、中央处理器8086/8088寄存器组: 通用寄存器 数据寄存器:AX,BX,CX,DX 变址寄存器:SI、DI 指针寄存器:SP、BP 控制寄存器:IP、FLAGS 段寄存器:CS、DS、SS、ES

汇编语言复习题(附答案)

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课 后四、六章的答案,大家抓紧时间复习哦! 一、选择题 1. 把要执行的程序与库文件连接起来形成可执行文件的系统程序是(B )。 A. 汇编程序 B. 连接程序 C. 机器语言程序 D.源代码程序 2. 在8088/8086的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是 (C )。 A..SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 3. 为了使主机访问外设方便起见,外设中的每个寄存器给予一个(C )。 A.物理地址 B. 逻辑地址 C. 端口地址 D. 段地址 4. MOV AX, 3064H,该指令中源操作数采用的寻址方式是(A )。 A.立即 B. 直接 C. 寄存器相对 D. 寄存器间接 5. 换码指令的助记符是(C )。 A. XCHG B. LEAS C.XLAT D. MOV 6. 如果A> B (A、B有符号数)发生转移,应选择的条件转移指令是(JGE )。 7. 下列符号中,可用作标识符的是(C )。 A.MOV B.AX C.MSG1 D.1ABC 8. X DB 10H DUP (1 , 2)内存变量定义语句拥有了( A )个字节的存储空间。 A.20D B.10D C.20H D.10H 9. 当DF=0时,执行串操作指令MOVSB变址寄存器SI、DI的值将(C )。 A.不变 B. 减1 C. 加1 D. 无法确定 10. 如下指令可将AX寄存器内容改变的是(A )。 A. AND AX , BX B . TEST AX , BX C. CMP AX , BX D . XCHG AX , AX 11.16位CPU支持的I/O 地址范围是(D )。 A. 0~0FFFFFH B. 0~0FFFFH C. 0~0FFFH D. 0~0FFH 12. MUL CL指令实现的功能是(A )。 A.无符号乘法:AX AL X CL B.有符号乘法:AX AL X CL C.无符号乘法:DX AL X CL D .有符号乘法:DX AL X CL 13. DOS系统功能调用(INT 21H )中,显示字符串的功能号是(D )。 A.01H B.02H C.08H D. 09H 14. 在16位CPU读取指令时,需要用到的寄存器对是(C )。 A.SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 15. 下列指令中,源操作数(既第2操作数)属于基址加变址寻址方式是(B )。 A.MOV AX,23H B. MOV AX,[BX+SI] C.SUB AX,[BX] D. ADD AX,BX 16. 有内存变量定义语句:VAR DW 10 DUP(1 , 2), 1234H, VAR的属性TYPE LENGTH和

汇编语言入门教程

汇编语言入门教程 2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK 出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS 段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。

汇编语言程序设计知识点

汇编语言程序设计知识点 第一章基础知识 (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响应?IF 6、键盘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

相关文档
相关文档 最新文档