汇编语言复习重点(王爽)

汇编语言复习重点(王爽)
汇编语言复习重点(王爽)

汇编语言(教材王爽)期末考试复习:

考试题型:选择、填空、程序分析、编程题

一、重点复习课本的检测点1.1-3.2与课后实验1-14:

二、需要掌握的指令见后面附录

三、汇编语言主要知识点:

寄存器与存储器

1. 寄存器功能

. 寄存器的一般用途和专用用途

. CS:IP 控制程序执行流程

. SS:SP 提供堆栈栈顶单元地址

. DS:BX(SI,DI) 提供数据段内单元地址

. SS:BP 提供堆栈内单元地址

. ES:BX(SI,DI) 提供附加段内单元地址

. AX,CX,BX和CX寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。

. PSW程序状态字寄存器只能通过专用指令(LAHF, SAHF)和堆栈(PUSHF,POPF)进行存取。

2. 存储器分段管理

. 解决了16位寄存器构成20位地址的问题

. 便于程序重定位

. 20位物理地址=段地址 * 16 + 偏移地址

. 程序分段组织: 一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。

3. 堆栈

. 堆栈是一种先进后出的数据结构 , 数据的存取在栈顶进行 , 数据入栈使堆栈向地址减小的方向扩展。

. 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。

. 堆栈总是以字为单位存取

指令系统与寻址方式

1. 指令系统

. 计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。执行指令后,一般源操作数不变,目的操作数被计算结果替代。

. 机器指令由CPU执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类: 数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。

2. 寻址方式

. 寻址方式确定执行指令时获得操作数地址的方法

. 分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。

. 与数据有关的寻址方式的一般用途:

(1) 立即数寻址方式--将常量赋给寄存器或存储单元

(2) 直接寻址方式--存取单个变量(直接给出地址值或变量名)

(3) 寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度

(4) 寄存器间接寻址方式--访问数组元素

(5) 变址寻址方式

(6) 基址变址寻址方式课本P164

(7) 相对基址变址寻址方式

(5),(6),(7)都便于处理数组元素

. 与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI或BP

. 与转移地址有关的寻址方式的一般用途:

(1) 段内直接寻址--段内直接转移或子程序调用

(2) 段内间接寻址--段内间接转移或子程序调用

(3) 段间直接寻址--段间直接转移或子程序调用

(4) 段间间接寻址--段间间接转移或子程序调用

汇编程序和汇编语言

1. 汇编程序

. 汇编程序是将汇编语言源程序翻译成二进制代码程序的语言处理程序,翻译的过程称为汇编。

2. 汇编语言

. 汇编语言是用指令助记符,各种标识变量,地址,过程等的标识符书写程序的语言, 汇编语言指令与机器指令一一对应。

. 伪指令,宏指令不是由CPU执行的指令,而是由汇编程序在汇编期间处理的指令。

. 伪指令指示汇编程序如何完成数据定义,存储空间分配,组织段等工作。

. 宏指令可简化程序并减少程序书写量。(不要求)

. 条件汇编伪指令的功能是确定是否汇编某段源程序,而不是实现程序分支,对未汇编的程序将不产生相应的目标代码。

. 结构作为一种数据结构可将一组类型不同但有逻辑关联的数据组织在一起,便于整体处理数据。

. 记录可用于提高存储单元的利用率,将若干不足一个字节或字且有逻辑关联的信息压缩存放在一个字节或字中。

. 指令中的表达式在汇编期间计算,并且只能对常量或地址进行计算。

程序设计基础

1. 分支程序设计

. 程序分支由条件转移指令或无条件转移指令实现

. 存放若干目的转移地址或跳转指令的跳转表常用于实现多路分支

. 条件转移指令只能实现偏移量为-128至+127字节范围的转移

. 无条件转移指令根据寻址方式可实现短转移(偏移量为-128至+127字节),段内转移,段间转移。

2. 循环程序设计

. 可由循环控制指令或条件转移指令组织循环结构

.内层循环结构必须完全包含在外层循环结构内,并不能发生从循环结构外向循环结构内的转移。

3. 子程序设计

. 子程序中应保护寄存器内容,并正确使用堆栈, 成对执行PUSH和POP指令,保证执行RET指令时堆栈栈顶为返回地址。

. 主程序可通过寄存器,参数表,或堆栈传递参数给子程序

4. EXE文件和COM文件?

. 二者都是可执行文件

. COM文件源程序的特点是: 第一条可执行指令的起始存放地址必须是100H,不能分段,不用定义堆栈,所有过程为NEAR类型,直接用INT 20H 指令返回DOS。

5. DOS功能调用与BIOS中断调用

. 二者都是完成DOS系统提供给用户的输入/输出等常用功能,通过执行软中断指令完成一次软中断服务。

.DOS功能调用的中断服务程序是操作系统的一部分,存于RAM中; 而BIOS中断调用的中断服务程序存放在ROM中。

输入/输出与中断系统

1. 输入/输出的方式

. 程序直接I/O方式: 用IN和OUT指令直接在端口级上进行I/O操作,数据传送方式分为无条件传送方式和查询传送方式。

. 中断传送方式: 由CPU响应中断请求完成中断服务。

. DMA传送方式: 直接在存储器与外设之间传送数据。

2. 有关中断的概念

. 中断、中断源、中断请求、中断服务、中断向量、中断向量表、中断响应过程、中断指令、开中断、关中断、内部中断、外部中断、可屏蔽中断、非屏蔽中断。

四、程序编写及程序分析填空类的题目:(主要是书中的实验)

1、编程,向内存0:200~0:23f依次传递数据0~63(3fh),程序中只能使用9

条指令,9条指中包括“mov ax,4c00h”和“int 21h”。

以及实验4的第3小题将指令复制到0:200处

2、编程,将datasg段中每个单词的前4个字母改写为大写字母。

assume cs:codesg,ss:stacksg,ds:datasg

stacksg segment

dw 0,0,0,0,0,0,0,0

stacksg ends

datasg segment

db '1. display '

db '2. brows '

db '3. replace '

db '4. modify '

datasg ends

3、编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome

to masm!'。

4、编写子程序:显示字符串

;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串

;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址

;返回:显示在屏幕上

5、编写子程序:.解决除法溢出问题

;名称:divdw

;功能:除法,被除数32位,除数16位,商32位,余数16位,不会溢出

;参数:(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数

;返回:(dx)=商高16位,(ax)=商低16位,(cx)=余数

6、数值显示

;名称:dtoc_word

;功能:将一个word型数转化为字符串

;参数:(ax)=word型的数据,ds:si指向字符串的首地址

;返回:ds:[si]放此字符串,以0结尾

7、编写子程序

;名称:letterc

;功能:将以0结尾的字符串中的小写字母转变成大写字母

;参数:ds:si开始存放的字符串

;返回:ds:si开始存放的字符串

8、编写0号中断的处理程序

编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。

五、参考习题

1什么是堆栈操作?以下关于堆栈操作的指令执行后,SP的值是多少?

PUSH AX

PUSH CX

PUSH DX

POP AX

PUSH BX

POP CX

POP DX

堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈),数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素,压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。

在进行以上一系列堆栈操作后,SP指针的值是原SP-2。

2用汇编语言指令实现以下操作。

(1)将寄存器AX、BX和DX的内容相加,和放在寄存器DX中。

ADD AX,BX

ADD DX,AX

(2)用基址变址寻址方式(BX和SI)实现AL寄存器的内容和存储器单

元BUF中的一个字节相加的操作,和放到AL中。

mov bx, offset buf

mov si,0

ADD AL,BYTE PTR [BX][SI]

(3)用寄存器BX实现寄存器相对寻址方式(位移量为100H),将DX的内容和存储单元中的一个字相加,和放到存储单元中。

ADD 100H[BX],DX

(4)用直接寻址方式(地址为0500H)实现将存储器中的一个字与立即数3ABCH相加,和放回该存储单元中。

ADD word ptr [0500H],3ABCH

(5)用串操作指令实现将内存定义好的两个字节串BUF1和BUF2相加后,存放到另一个串BUF3中的功能。

……

MOV CX,COUNT

MOV SI,OFFSET BUF1 源串

MOV DI,OFFSET BUF3 目的串

MOV BX,OFFSET BUF2 辅助

AGAIN:LODSB

ADD AL,[BX]

STOSB

INC BX 注意没有和KEP配合,所以CX - 1

DEC CX

JNZ AGAIN

……

3指出下列指令中,源操作数及目的操作数的寻址方式。

(1)SUB BX,[BP+35] ;寄存器寻址、寄存器相对寻址

(2)MOV AX,2030H ;寄存器寻址、立即寻址串扫描指令(3)SCASB ;隐含操作数为寄存器寻址和寄存器间接寻址(4)IN AL,40H ;寄存器寻址、立即寻址

(5)MOV [DI+BX],AX ;基址加变址寻址、寄存器寻址

(6)ADD AX,50H[DI] ;寄存器寻址、寄存器相对寻址

(7)MOV AL,[1300H] ;寄存器寻址、直接寻址

(8)MUL BL ;寄存器寻址、目的操作数为隐含寄存器寻址

4已知(DS)= 1000H,(SI)= 0200H,(BX)= 0100H,(10100H)= 11H,(10101H)= 22H,(10600H)= 33H,(10601H)= 44H,(10300H)= 55H,(10301H)= 66H,(10302H)= 77H,(10303H)= 88H,试分析下列各条指令执行完后AX寄存器的内容。

(1)MOV AX,2500H (AX)=2500H

(2)MOV AX,500H[BX] (AX)==4433H [BX+500H] = [0600H](3)MOV AX,[300H] (AX)=6655H

(4)MOV AX,[BX] (AX)=2211H

(5)MOV AX,[BX][SI] (AX)=6655H

(6)MOV AX,[BX+SI+2] (AX)=8877H

5判断下列指令是否有错,如果有错,说明理由。

(1)SUB BL,BX ;两个操作数的宽度不一样

(2)MOV BYTE PTR[BX],3456H ;将16位的立即数传送到一个字节的内存单元

(3)SHL AX,CH ;移位指令的移位位数用CL给出,不能用CH。

(4)MOV AH,[SI][DI] ;不能用两个变址寄存器来实现寻址操作

(5)SHR AX,4 ;只有当移位位数为1时,才能用立即数表达

(6)MOV CS,BX ;不能对CS实现传送操作

(7)MOV 125,CL ;立即数不能做目的操作数

(8)MOV AX,BYTE PTR[SI] ;源操作数限定为字节,与目的操作数宽度不一致

(9)MOV [DI],[SI] ;两个操作数不能同时为内存数

6设(DS)= 1000H,(ES)= 2000H,(SS)= 3000H,(SI)= 0080H,(BX)= 02D0H,(BP)= 0060H,试指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?

(1)MOV AX,0CBH 立即寻址DS*16 + 100H

(2)MOV AX,[100H] 直接寻址,物理地址为:10100H

(3)MOV AX,[BX] 寄存器间接寻址,物理地址为:102D0H

(4)MOV AX,[BP] 寄存器间接寻址,物理地址为:30060H SS*16+BP (5)MOV AX,[BP+50] 寄存器相对寻址,物理地址为:300B0H

(6)MOV AX,[BX][SI] 基址加变址寻址,物理地址为:10350H

7分别说明下列每组指令中的两条指令的区别.

(1) AND CL,0FH 按位相“与”,高4位为“0000”,低4位保留原值;

OR CL,0FH 按位相“或”,高4位为原值,低4位为“1111”。

(2) MOV AX,BX 将BX寄存器的内容传送到AX寄存器中;

MOV AX,[BX] 将BX寄存器所指的内存单元的内容送AX寄存器中。

(3) SUB BX,CX BX寄存器内容减去CX寄存器的内容,结果送回到BX;

CMP BX,CX BX内容减去CX内容,但结果不送回,而根据标志位的情况做进一步的动作。

(4) AND AL,01H AL内容与01H相“与”,结果为“0000000x”送回AL寄存器;

TEST AL,01H AL内容与01H相“与”,结果为“0000000x”不送回AL寄存器,而根据标志位(ZF)情况做进一步的动作。

(5) JMP NEAR PTR NEXT NEXT所指指令在当前指令的同段内(16位地址范围);

JMP SHORT NEXT NEXT所指指令在当前指令的8位地址范围内。

(6) ROL AX,CL 循环左移,进位标志位不参与循环;

RCL AX,CL 循环左移,进位标志位参与循环。

(7) PUSH AX 将AX内容存入栈顶指针处,即进栈操作;

POP AX 将栈顶内容弹出装入AX寄存器中,即出栈操作。

8试分析以下程序段执行完后BX的内容为何?

MOV BX,1030H

MOV CL,3

SHL BX,CL

DEC BX

程序执行完后,BX=817FH,执行过程如下。

9、在BUF1变量中依次存储了5个字数据,接着定义了一个名为BUF2的字单元,表示如下:

BUF1 DW 8765H,6CH,0,1AB5H,47EAH

BUF2 DW ?

(1)设BX中是BUF1的首地址,请编写指令将数据50H传送给BUF2单元。

ADD BX,10

MOV WORD PTR[BX+10],50H

(2)请编写指令将数据FFH传送给数据为0的单元。

ADD BX,4

MOV WORD PTR[BX+10],0FFH

10、下面是一个数据段的定义,请用图表示它们在内存中存放的形式。

DATA SEGMENT

A1 DB 25H,35H,45H

A2 DB 3 DUP(5)

A3 DW 200,3AB6H

A4 DW 3000H,6A6FH

DATA ENDS

A1

A2

A3

A4

11、说明下列语句所分配的存储空间及初始化的数据值。

(1)BYTE_VAR DB ‘BYTE’,21,-42H,3 DUP(0,?,2 DUP(2,3),?) (2)0),?,-8

BYTE_VAR WORD_VAR

12、在下列数据传送程序段中有些使用不当的语句,请改正之。

A D

B 10H ,20H ,‘OPQ ’,4FH

B DB N DUP (?) ;改为B DB 6 DUP (?)

MOV DI,A ;改为MOV DI,OFFSET A

MOV SI,B ;改为MOV SI,OFFSET B

MOV CX,LENGTH A ;改为MOV CX,LENGTH B

CC: MOV AL,[DI]

MOV [SI],AL

INC SI

INC DI

LOOP CC

13、有一个数据段定义了如下6个变量,请写出该数据段。

(1)BUF1为十进制数字节变量:64;

(2)BUF2为字符串变量:‘Teacher’;

(3)BUF3为十六进制数字节变量:2FH;

(4)BUF4为双字变量:657AH;

(5)BUF5为字变量:657AH;

(6)BUF6为二进制数字节变量:10101101B。

DATA SEGMENT

BUF1 DB 64

BUF2 DB ‘Teacher’

BUF3 DB 2FH

BUF4 DD 657AH

BUF5 DW 657AH

BUF6 DB 10101101B

14以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。

⑴ 12F8:0100 ⑵ 1A2F:0103 ⑶1A3F:0003 ⑷ 1A3F:A1FF

15 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示):03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据的值。

16分别指出下列指令中源操作数和目标操作数的寻址方式。

⑴ MOV BX,12

⑵ MOV AL,128

⑶ MOV [BX],DX

⑷ MOV DS,AX

⑸ MOV VAR,8

⑹ MOV [1000H],DX

⑺ MOV 6[BX],CX

⑻ MOV AX,[BX][SI]

⑼ MOV TAB[BP][DI],AL

17 在80X86系统中,设(DS)=1000H,(ES)=2000H,(SS)=1200H,(BX)=0300H,(SI)=0200H,(BP)=0100H,VAR的偏移量为0060H,若目标操作数为存储器操作数,请计算目标操作数的物理地址是多少?

⑴ MOV BX,12 ⑵ MOV AL,128

⑶ MOV [BX],DX ⑷ MOV ES:[SI],AX

⑸ MOV VAR,8 ⑹ MOV [1000H],DX

⑺ MOV 6[BX],CX ⑻ MOV [BX][SI],AX

⑼ MOV 6[BP][SI],AL

18 指出下指令的不同:

⑴ MOV AX,3000H 与 MOV AX,[3000H]

⑵ MOV AX,MEM 与 MOV AX,OFFSET MEM

⑶ MOV AX,MEM 与 LEA AX,MEM

19 指出下列指令的错误:

⑴ MOV [AX],BX ⑵ MOV AL,1280

⑶ MOV [BX],9 ⑷ MOV DS,1000H

⑸ MOV VAR,[BX] ⑹ MOV M1,M2

⑺ MOV 6,CX ⑻ MOV AX,[SI][DI]

⑼ MOV CS,AX ⑽ MOV BX,OFFSET VAR[SI]

20 自BUFFER单元开始连续存放着两个字型数据,编程序求它们的和,并把结果存放在这两个数据之后。

21 写出把首址为BUF的字型数组的第4个字送到AX寄存器的指令,要求使用以下几种寻址方式:

⑴直接寻址方式

⑵使用BX的寄存器间接寻址方式

⑶使用BX的寄存器相对寻址方式

22 设(DS)=1000H,(BX)=0300H,(SI)=0002H,(DI)=0100H,自1000:0300单元开始存有以下数据(用十六进制形式表示):12 34 56 78 90 AB CD EF,试说明下列各条指令执行后目标操作数的内容。

⑴ ADD BX,12 ⑵ MOV DX,[0300H]

⑶ SUB BYTE PTR [BX],8 ⑷ MOV AX,[BX][SI]

⑸ MOV CX,5[BX] ⑹ MOV DX,4[BX][SI]

23 编程序使:

⑴使AL的各位变反。

⑵ BX寄存器低四位置1。

⑶ AX寄存器的低四位清0。

⑷使CX寄存器的低四位变反。

⑸用TEST指令测试AL寄存器的位0和位6是否同时为0,若是则把0送DH寄存器,否则把1送DH寄存器。

24.下列语句各为变量分配了多少字节?

⑴ N1 DB 5

⑵ N2 DB 123

⑶ N3 DB ‘123’

⑷ N4 DB 80,?,80 DUP (0)

⑸ N5 DW 1,2,3

⑹ N6 DD 6,100

⑺ N7 DD N3

⑻ N8 DW N4

⑼ N9 DW N4+2

25.对于第12题,若N1的地址为1470:0000,其后的变量依次连续存放,试

给出各变量的偏移量。N7~N9变量的值是多少?

14.如果定义了如第12题所示的变量,下列指令执行的结果是什么(若语句正确,则给出执行结果;若不正确,说明错误原因)?

⑴ ADD N1,10

⑵ MOV AL,N2

⑶ SUB N3,N2

⑷ MOV AL,N3+2

⑸ LEA DX,N4+2

⑹ XOR N5,0FH

⑺ MOV N4+1,CX

⑻ AND N1,01234H

⑼ NUM1 EQU 89

ADD NUM1,10

⑽ NUM2 EQU 100

NUM2 EQU 120

26.假设有下列数据定义语句:

⑴ M1 DB 10

⑵ M2 DW 2345H

⑶ M3 DD 987865H

试写出汇编程序对这些语句汇编后所生成的值(例如M2单元、M2+1单元的内容)。

27.有以下程序片段,试问汇编后符号L1和L2的值各为多少?

BUF1 DB 1,2,3

BUF2 DW 5,6,7

L1 EQU $-BUF2

L2 EQU BUF2-BUF1

28. 若AX=0ABCDH,BX=7F8FH,CF=1。求分别执行8086 CPU指令

⑴ADD AX,BX

⑵ADC AX,BX

⑶SBB AX,BX

⑷NEG AX

⑸AND AX,BX

⑹OR AX,BX

⑺XOR AX, BX

⑻IMUL BL

后,AX寄存器中的内容,

29. 指出下列指令中哪些是错误的,并指出错在何处?

⑴MOV DL,[DX]

⑵MOV ES,2000H

⑶SUB [BX],[SI]

⑷ADD AX,[BX+CX]

⑸XCHG DS,[2400H]

⑹DEC 15H

⑺IN AL,DX

⑻ OUT 300H,AX

解答

⑴错,DX不能作为间接寻址的寄存器。

⑵错,立即数不能直接送给段寄存器。

⑶错,两个存储单元间内容不能直接相减。

⑷错,CX寄存器不能作为变址寄存器。

⑸错,不允许段寄存器与存储单元内容进行交换

⑹错,减1指令不能对段寄存器直接操作

⑺对

⑻错,输出指令的地址若是16位,必须用DX间址。

30. 下列程序段执行后 AX=?

设数据段有: TABLE DW 100,200,300,400

ENTRY DW 3

代码段对DS初始化

MOV BX,OFFSET TABLE

MOV SI,ENTRY

MOV AX,[BX+SI]

31. 若SS=1000H,SP=2000H,AX=1234H,BX=5678H,FR=2115,试说明执行指令

PUSH AX

PUSH BX

PUSHF

POP CX

POP DX

之后,SP=? SS=? CX=? DX=? 并画图指出堆栈中各单元的内容。

解答: SS=1000H

SP=1FFEH

CX=2115H

DX=5678H

栈中各单元内容如下所示:

32、读下列程序段:写出; (1)每条指令连续执行后,哪些寄存器发生变化?内容是什么? (2)程序段执行完后,BX寄存器的肉容是什么?

① MOV BX,3F93H

② MOV CL ,4

③ ADD BX ,CL

④ MOV AL ,BL

⑤ AND AL ,0FH

⑥ 0R AL ,30H

六附录:汇编指令

红色为需要掌握的汇编指令:

一、数据传输指令

───────────────────────────────────────

它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.

1. 通用数据传送指令.

MOV 传送字或字节.

MOVSX 先符号扩展,再传送.

MOVZX 先零扩展,再传送.

PUSH 把字压入堆栈.

POP 把字弹出堆栈.

PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.

POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.

PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.

POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.

BSWAP 交换32位寄存器里字节的顺序

XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里 )

XLAT 字节查表转换.

── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )

2. 输入输出端口传送指令.

IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )

OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )

输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,

其范围是 0-65535.

3. 目的地址传送指令.

LEA 装入有效地址.

例: LEA DX,string ;把偏移地址存到DX.

LDS 传送目标指针,把指针内容装入DS.

例: LDS SI,string ;把段地址:偏移地址存到DS:SI.

LES 传送目标指针,把指针内容装入ES.

例: LES DI,string ;把段地址:偏移地址存到ES:DI.

LFS 传送目标指针,把指针内容装入FS.

例: LFS DI,string ;把段地址:偏移地址存到FS:DI.

LGS 传送目标指针,把指针内容装入GS.

例: LGS DI,string ;把段地址:偏移地址存到GS:DI.

LSS 传送目标指针,把指针内容装入SS.

例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 标志传送指令.

LAHF 标志寄存器传送,把标志装入AH.

SAHF 标志寄存器传送,把AH内容装入标志寄存器.

PUSHF 标志入栈.

POPF 标志出栈.

PUSHD 32位标志入栈.

POPD 32位标志出栈.

二、算术运算指令

───────────────────────────────────────

ADD 加法.

ADC 带进位加法.

INC 加 1.

AAA 加法的ASCII码调整.

DAA 加法的十进制调整.

SUB 减法.

SBB 带借位减法.

DEC 减 1.

NEC 求反(以 0 减之).

CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).

AAS 减法的ASCII码调整.

DAS 减法的十进制调整.

MUL 无符号乘法.

IMUL 整数乘法.

以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),

AAM 乘法的ASCII码调整.

DIV 无符号除法.

IDIV 整数除法.

以上两条,结果回送:

商回送AL,余数回送AH, (字节运算);

或商回送AX,余数回送DX, (字运算).

AAD 除法的ASCII码调整.

CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)

CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)

CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)

CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)

三、逻辑运算指令

───────────────────────────────────────

AND 与运算.

OR 或运算.

XOR 异或运算.

NOT 取反.

TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).

SHL 逻辑左移.

SAL 算术左移.(=SHL)

SHR 逻辑右移.

SAR 算术右移.(=SHR)

ROL 循环左移.

ROR 循环右移.

RCL 通过进位的循环左移.

RCR 通过进位的循环右移.

以上八种移位指令,其移位次数可达255次.

移位一次时, 可直接用操作码. 如 SHL AX,1.

移位>1次时, 则由寄存器CL给出移位次数.

如 MOV CL,04

SHL AX,CL

四、串指令

───────────────────────────────────────

DS:SI 源串段寄存器 :源串变址.

ES:DI 目标串段寄存器:目标串变址.

CX 重复次数计数器.

AL/AX 扫描值.

D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.

Z标志用来控制扫描或比较操作的结束.

MOVS 串传送.

( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )

CMPS 串比较.

( CMPSB 比较字符. CMPSW 比较字. )

SCAS 串扫描.

把AL或AX的内容与目标串作比较,比较结果反映在标志位.

LODS 装入串.

把源串中的元素(字或字节)逐一装入AL或AX中.

( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )

STOS 保存串.

是LODS的逆过程.

REP 当CX/ECX<>0时重复.

REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.

REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.

REPC 当CF=1且CX/ECX<>0时重复.

REPNC 当CF=0且CX/ECX<>0时重复.

五、程序转移指令

───────────────────────────────────────

1>无条件转移指令 (长转移)

JMP 无条件转移指令

CALL 过程调用

RET/RETF过程返回.

2>条件转移指令 (短转移,-128到+127的距离内)

( 当且仅当(SF XOR OF)=1时,OP1

JA/JNBE 不小于或不等于时转移.

JAE/JNB 大于或等于转移.

JB/JNAE 小于转移.

JBE/JNA 小于或等于转移.

以上四条,测试无符号整数运算的结果(标志C和Z).

JG/JNLE 大于转移.

JGE/JNL 大于或等于转移.

JL/JNGE 小于转移.

JLE/JNG 小于或等于转移.

以上四条,测试带符号整数运算的结果(标志S,O和Z).

JE/JZ 等于转移.

JNE/JNZ 不等于时转移.

JC 有进位时转移.

JNC 无进位时转移.

JNO 不溢出时转移.

JNP/JPO 奇偶性为奇数时转移.

JNS 符号位为 "0" 时转移.

JO 溢出转移.

JP/JPE 奇偶性为偶数时转移.

JS 符号位为 "1" 时转移.

3>循环控制指令(短转移)

LOOP CX不为零时循环.

LOOPE/LOOPZ CX不为零且标志Z=1时循环.

LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.

JCXZ CX为零时转移.

JECXZ ECX为零时转移.

4>中断指令

INT 中断指令

INTO 溢出中断

IRET 中断返回

5>处理器控制指令

HLT 处理器暂停, 直到出现中断或复位信号才继续.

WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.

ESC 转换到外处理器.

LOCK 封锁总线.

NOP 空操作.

STC 置进位标志位.

CLC 清进位标志位.

CMC 进位标志取反.

STD 置方向标志位.

CLD 清方向标志位.

STI 置中断允许位.

CLI 清中断允许位.

六、伪指令

───────────────────────────────────────

DW 定义字(2字节).

PROC 定义过程.

ENDP 过程结束.

SEGMENT 定义段.

ASSUME 建立段寄存器寻址.

END S段结束.

END 程序结束

汇编语言 第二版 王爽 完整答案

第1章基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。 (2)1KB的存储器有1024个存储单元。存储单元的编号从0到1023。 (3)1KB的存储器可以存储1024*8个bit,1024个Byte。 (4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。(n^m的意思是n的m次幂) (5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。 (7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。 (8)在存储器中,数据和程序以二进制形式存放。 第2章寄存器答案 检测点2.1 (1) 写出每条汇编指令执行后相关寄存器中的值。 mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H mov al,23H AX=3123H add ax,ax AX=6246H mov bx,826CH BX=826CH mov cx,ax CX=6246H mov ax,bx AX=826CH add ax,bx AX=04D8H mov al,bh AX=0482H mov ah,bl AX=6C82H add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H (2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2 (1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。 (2) 有一数据存放在内存 20000H 单元中,先给定段地址为SA,若想用偏移地址寻到此单元。

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

汇编语言程序设计报告

实验一: 一、实验目的: 1. 学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2. 了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3. 掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4. 掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的01h号功能号从键盘输入一个字符并回显到视频显示器上 三、实验内容及算法流程、源程序清单 实验内容:编写程序,从键盘输入一个字符并回显到视频显示器上。 源程序清单: 实验1.asm 实验1.obj 实验1.exe code segment assume cs:code start: mov ah,1 int 21h mov ah,4ch int 21h code ends end start 实验二:编写程序,显示一个字符Q 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的02h号功能显示输出一个字符Y。

三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,显示输出一个字符Q。 源程序清单: 实验2.asm 实验2.obj 实验2.exe code segment assume cs:code start: mov ah,02 mov dl,'Q' int 21h mov ah,4ch int 21h code ends end start 实验三:编写程序,在屏幕上显示输出“I love DOTA” 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 考察通过调用(INT 21H)表中的0ah号功能显示输出字符串 三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,在屏幕上显示输出‘I love DOTA。 源程序清单: 实验3.asm 实验3.obj 实验3.exe data segment buf db 'I love DOTA.$'

汇编语言课程设计

沈阳大学

2.3 MASM的介绍 MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发,历经二三十年的发展,目前MASM的版本已升至6.15,支持MMX Pentium、Pentium II、Pentium III及Pentium 4等指令系统。 2.4总体设计功能 本次课程设计的内容是采用汇编语言设计一个运行于计算机的“霓虹灯”的模拟显示 程序,由$及*字符相间,从两侧向中间螺旋汇聚直至形成一个矩形,这就要求该霓虹灯能够动态地进行变化;霓虹灯模拟显示程序主要是进行程序循环调用,可以通过CMP、JMP、JZ、RET等命令进行跳转。由于是霓虹灯的模拟显示,因此在进行程序循环调用前需要进行数据段定义,以使子程序在进行调用时能够根据数据段的定义来执行,最后显示结果。 定时器中断处理程序:计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。 视频显示程序设计:一般由DOS 或BIOS调用来完成。有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。用INT 10H中断即可建立某种显示方式。用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用。 键盘扫描程序设计:利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器,以及检测键盘状态,有无输入,并检测输入各值。 2.5详细功能设计 2.5.1主程序功能 主程序通过调用各个子程序来实现清屏,改变图形等功能,具体调用过程如图1所示。 沈阳大学

汇编语言基本关键字

汇编语言基本关键字 aaa对非压缩BCD码加法之和调整 aas 对非压缩BCD码减法之差调整 aam乘法调整aad被除数调整 add不带进位标志位的加法adc带进位标志位的加法 and逻辑与 assume指定段寄存器 bswap双字单操作数内部交换 bt位测试bts位测试并置一 btr位测试并清零btc位测试并取反 bsf/bsr正,反向位扫描 call调用 cbw字节转换为字cwd字转换为双字cwde字转换为扩展的双字cdq双字转换为四字 cmp比较cmpxchg比较并交换 cmps串比较 code定义简化代码段 const定义简化常数数据段 daa对压缩BCD码加法之和调整das对压缩BCD码减法之差调整 data定义简化数据段 db/dw/dd/dq/dt定义字节/字/双字/四字/十字变量 dec减一

df定义32位便宜地址的远地址指针 div无符号数除法 equ等价textequ文本等价 even取偶偏移地址 fardata,fardata定义简化独立数据段 group定义段组 idiv有符号整数除法 imul有符号整数乘法 in输入 inc加一 ins/outs输入/输出串元素 jcxz/jecxz若cx=0/ecx=0,跳转 jmpdopd无条件跳转到DOPD 处取出指令继续执行 label为$定义符号 Lahf 标志位低八位送AH lea 偏移地址送通用寄存器lda传送进入数据段的地址指针 les传送进入附加数据段的地址指针lfs传送进入FS段的地址指针lgs传送进入GS段的地址指针lss传送进入堆栈段的地址指针 local说明局部变量 lods读出串元素 Loop/loopd无条件循环cx/ecx为循环次数 loopnz/loopnzd非零或不等时循环,cx/ecx为循环次数

王爽《汇编语言》第1章DOC版

第1章基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程。在本章中,对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行。当课程进行到需要补充新的基础知识(关于编程结构或其他的)时候,再对相关的基础知识进行介绍和探讨。本书的原则是,以后用到的知识,以后再说。 在汇编课程中不对硬件系统进行全面和深入的研究,因为这不在本课程的范围之内。关于PC机及CPU物理结构和编程结构的全面研究,在《微机原理与接口》中进行;对于计算机一般的结构、功能、性能的研究在一门称为《组成原理》的理论层次更高的课程中进行。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作。 1.1 机器语言 说到汇编语言的产生,首先要讲一下机器语言。机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。 上面所说的计算机指的是可以执行机器指令,进行运算的机器。这是早期计算机的概念。现在,在常用的PC机中,有一个芯片来完成上面所说的计算机的功能。这个芯片就是我们常说的CPU(Central Processing Unit,中央处理单元),CPU是一种微处理器。以后我们提到的计算机是指由CPU和其他受CPU直接或间接控制的芯片、器件、设备组成的计算机系统,比如我们最常见的PC机。 每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自已的机器指令集,也就是机器语言。 早期的程序设计均使用机器语言。程序员们将用0、1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。 应用8086CPU完成运算s=768+12288-1280,机器码如下: 101100000000000000000011 000001010000000000110000 001011010000000000000101 假如将程序错写成以下这样,请读者找出错误。 101100000000000000000011 000001010000000000110000 000101101000000000000101

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告 ( 2011 -- 2012 年度第 2 学期) 实现加减乘除四则运算的计算器 专业 计算机科学与技术 学生姓名 班级 学号 指导教师 完成日期

目录 目录错误!未定义书签。 1 概述错误!未定义书签。 设计目的错误!未定义书签。 设计内容错误!未定义书签。 2 系统需求分析错误!未定义书签。 系统目标错误!未定义书签。 主体功能错误!未定义书签。 开发环境错误!未定义书签。 3 系统概要设计错误!未定义书签。 系统的功能模块划分错误!未定义书签。系统流程图错误!未定义书签。 4系统详细设计错误!未定义书签。 5 测试错误!未定义书签。 测试方案错误!未定义书签。 测试结果错误!未定义书签。 6 小结错误!未定义书签。 参考文献错误!未定义书签。 附录错误!未定义书签。 附录源程序清单错误!未定义书签。

实现加减乘除四则运算的计算器 1 概述 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2 系统需求分析 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 主体功能 系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。 本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果 开发环境 集成环境 3 系统概要设计 系统的功能模块划分 本题目实现的模块图如图3-1所示

汇编语言程序设计报告模板总结模板计划模板.docx

《汇编语言》课程设 计报告 专业计算机科学与技术 学生姓名张竹青 班级Z计算机 151 学号1560704132 任课老师王志宏 完成日期2017年12月29日

目录 1 概述 (1) 1.1 设计目的 (1) 1.2 设计内容 (1) 2 系统需求分析 (1) 2.1 系统目标 (1) 2.2 主体功能 (1) 2.3 开发环境 (2) 3 系统概要设计 (2) 3.1 系统的功能模块划分 (2) 3.2 系统流程图 (3) 4 系统详细设计 (4) 4.1 界面设置 (4) 4.2 选择算法设置 (4) 4.3 十进制转换设置 (4) 5 测试 (5) 5.1 测试方案 (5) 5.2 测试结果 (5) 6 小结 (6) 参考文献 (7)

实现加减乘除四则运算的计算器 1 概述 1.1 设计目的 使用汇编语言,通过实现简单计算器的一般功能,如加、减、乘、除的计算来 了解并掌握 DOS系统功能的调试方法,学会画出编程的具体流程图,同时在程序 设 计过程中熟悉各种指令的应用和意义,以及如何进行上机编辑、汇编、连接和调试。 本课程设计也是对课堂上所学的基本理论知识和程序设计方法的巩固和深化, 提高我们的编程思想、分析问题和解决问题的综合应用能力,能够编写较复杂的应 用程序,最终达到熟练地掌握结构化程序设计技术和编写汇编源程序的基本方法的 目的。 1.2 设计内容 设计一个能实现加、减、乘、除计算的程序,要求该程序接受从键盘输入的十 六进制数,当程序执行时需在文件名后直接跟上计算表达式,每当读到一个有效的 表达式时对表达式进行相应的运算后,输出用十进制数或十六进制数表示的运算结果,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2系统需求分析 2.1 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单的加减乘除四则运算的 计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则 运算。具体功能如下: (1)调用中断把要做运算的两个数输入到屏幕上并用程序将他们存储起来 (2)判断用户所输入的运算是四则运算中的哪一种运算 (3)判断运算过程中是进位还是借位 (4)选择用何种输出方式 (5)实现清屏 2.2 主体功能 要求该程序接受的是十六进制数,执行相应的计算后,计算结果以十六进制数 或十进制数输出。本设计的使用说明如下: (1)按照提示选择数字 1,2,3,4 (2) 1: ADD 加法 (3) 2: SUB 减法 (4) 3: MUL 乘法

汇编语言-课程设计1

) 汇编语言课程实验报告 实验名称 课程设计1 实验环境 硬件平台:Intel Core i5-3210M 操作系统:DOSBox in Windows 软件工具:Turbo C , Debug, MASM 实验内容 《 将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。 实验步骤 1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏 幕的程序,其汇编代码如下: ;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 ¥ show_str: push ax push cx push dx push es push si push di mov ax,0b800h - mov es,ax mov al,160 mul dh add dl,dl mov dh,0 add ax,dx mov di,ax mov ah,cl . show_str_x: mov cl,ds:[si] mov ch,0 jcxz show_str_f mov al,cl mov es:[di],ax inc si inc di 【 inc di jmp show_str_x show_str_f: pop di pop si pop es pop dx pop cx } pop ax ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出

汇编语言-王爽-完美高清版视频教程

汇编语言》-王爽-完美高清版-零基础汇编语言入门书籍PDF格式 同时按ctrl+要下载的地址既可下载对应的视频 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f61cb107c8 001第一章- 基础知识01 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6806f45b8 002第一章- 基础知识02 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6ec42d4d3 003第一章- 基础知识03 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6deb05ec4 004第一章-基础知识04 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6e51f6838 005第一章- 基础知识05 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f66edaf8d3 006第二章- 寄存器(CPU工作原理)01 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6d07e07b9 007第二章- 寄存器(CPU工作原理)02 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6d7f585a8 008第二章- 寄存器(CPU工作原理)03 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f639d8b3cf 009第二章- 寄存器(CPU工作原理)04 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6dcadbde6 010第二章- 寄存器(CPU工作原理)05 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6ea3f01c1 011第二章- 寄存器(CPU工作原理)06 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f65b96a06f 012第二章- 寄存器(CPU工作原理)07 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f682da085a 013第三章- 寄存器(内存访问)01 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6486e698 014第三章- 寄存器(内存访问)02 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6b7491d9f 015第三章- 寄存器(内存访问)03 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f622b7f9a7 016第三章- 寄存器(内存访问)04 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f64e2424b9 017第三章- 寄存器(内存访问)05 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6e5132d4d 018第三章- 寄存器(内存访问)06 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f655c10e86 019第三章- 寄存器(内存访问)07 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6b22e64e6 020第四章- 第一个程序01 下载地址:https://www.360docs.net/doc/5a18367587.html,/file/f6812126a4

汇编语言程序设计大纲

《汇编语言程序设计》课程教学大纲 课程编号: 0910218 课程名称:汇编语言程序设计 英文名称:Assemble Language Programming 课程类型: 专业基础课 总学时:48 讲课学时:48 实验学时:0 学分:3 适用对象: 计算机科学与技术、网络工程、信息安全及相关专业 先修课程:数字逻辑与数字系统设计、数据结构 一、课程性质、目的和任务 汇编语言程序设计是计算机科学与技术、网络工程、信息安全等专业的必修课,是进一步学习操作系统、编译、接口与通信等专业课的基础。通过本门课程的学习,学生可以加深对计算机工作原理的理解,有助于促进后续课程的学习。同时,汇编语言作为一种计算机语言工具,对于学生将来从事计算机的研究与应用是必需的,有助于提高学生的程序设计能力。 二、教学基本要求 通过本课程的学习,要求学生了解或掌握:模型机的基本结构、工作原理、寻址方式及指令系统,用汇编语言编写顺序、分支、循环、子程序、宏汇编语言程序等各种程序的技术。学会编写输入/输出程序和中断服务程序,掌握利用系统的功能调用进行程序设计的方法。掌握汇编过程和汇编程序的原理,能够正确熟练地使用编辑、汇编、链接和调试等各种软件工具。 三、教学内容及要求 1. 模型机结构。模型机系统的概述,存储器、中央处理器及外部设备与接口的基本概念、工作原理及编程方法。 2. 指令系统与寻址方式。模型机的寻址方式,机器语言指令格式,汇编语言指令系统。 3. 汇编语言程序格式。汇编程序的功能,伪操作,汇编语言程序格式。 4. 循环与分支程序设计。程序流程图的画法;分支与循环程序的设计思想与方法,重点介绍双重循环的程序设计和通过比较——判断、跳转表等方法进行分支程序设计。 5. 系统功能调用。介绍操作系统提供的BIOS、DOS等系统功能调用,学习通过功能调用进行程序设计的方法。 6. 子程序设计。子程序的设计方法,嵌套与递归子程序,堆栈在其中的应用。 7. 高级汇编语言技术。宏汇编、重复汇编、条件汇编的基本概念及其程序设计。 8. 输入输出及中断程序设计。I/O设备的数据传送方式,程序直接控制I/O方式和中断程序设计。 9. 软件工具。汇编程序、文本编辑程序、链接程序、调试程序的基本功能及汇编语言程序编写、调试、运行中的使用方法。 四、实践环节 见“汇编语言程序设计综合实验”。

汇编语言程序设计课程教学大纲.

《汇编语言程序设计》课程教学大纲 二、课程性质与教学目标 《汇编语言程序设计》是计算机科学与技术专业一门重要的基础课,是必修的核心课程之一,是"操作系统"和"微机原理和接口技术"等其它核心课程必要的先修课,而且对于训练学生掌握程序设计技术,熟悉上机操作和程序调试技术都有重要作用。因此该课程在整个教学计划中占有重要地位。 本课程的目的和要求是: 1、应使学生掌握8086/8088宏汇编语言程序设计的基本方法和技巧,能够运用8086/8088宏汇编语言编写应用程序。提高学生分析问题、解决问题的能力以及实际动手能力。 2、应使学生基本掌握汇编语言程序设计的基本理论,方法和技巧,正确地使用结构化、模块程序设计技术。注意培养学生良好的程序设计风格。 3、应使学生比较熟练地使用调试工具DEBUG调试8086/8088汇编语言程序。注意提高学生的调试能力。 4、注意与前后相关课程的关系。使学生对前导课程有进一步的理解,同时为学习后继课程打好基础。 三、教学内容及基本要求 第一单元基础知识 [知识点] 汇编语言的基本概念、数据的表示和类型、几种基本的逻辑运算、Intel 8088/8086微处理器基本概念、存储器分段和地址的形成、

[教学内容] 1.以二进制存在的机器语言。计算机内部数的存储及运算也都是采用二进制。 2.制数的值由1所在位置的权来确定。 3.进制是一种很重要的短格式记数法,它把二进制数每4位分成一组,分别用0-9和 A-F来表示0000-1111。反之,16进制数的每一位用四位二进制表示,就是相应的二进制数。 4.十进制转换为二进制的方法主要有降幂法和除法。计算机十化二程序中采取下面的算法: 5.标志位OF=1表示带符号数的运算结果无效。CF=1表示无符号数运算结果无效。 6.计算机中的字符数据用ASCⅡ码表示,一个字符在存储器中占用一个字节(8位二进制码)。 7.BCD码是一种用二进制编码的十进制数,又称二-十进制数或8421码,它用4位二进制数表示一个十进制数码。BCD码有压缩和非压缩两种格式,压缩的BCD码用4位二进制数表示一个十进制数位,如95 表示为1001,0101。非压缩的BCD码用地位二进制数表示一个十进制数位。如95 表示为00001001 00000101。 8.两种类型的内部存储器是ROM(只读存储器)和RAM(随机存储器)。存储器按字节编址,存储器地址一般用16进制的无符号数表示。 9.字数据在存储器中存放的顺序为高地址字节放高8位,低地址字节放低8位。 10.AX、BA、CA、和DX是通用寄存器,每个通用寄存器可作两个8位寄存器使用(如AH和AL)。 11.一个20位的物理地址可表示成段地址:偏移地址。计算存储器单元的物理地址,可将段地址乘以10H,再加上偏移地址。 物理地址=(段地址×10H)+偏移地址 12.段寄存器CS、SS、DS和ES分别寄存代码段、堆栈段、数据段和附加段的段地址。 13.变址寄存器SI和DI一般指示数据段内单元的地址,有时也可作为数据寄存器用。 14.16位的标志寄存器个包括6个状态标志(SF、ZF、PF、CF、AF、OF)和3个控制标志(DF、IF、TF)。(CF、AF、SF、ZF和OF反映了算术运算以及移位、循环、逻辑等操作的结果状态。 [重难点] 1.教学重点 1.汇编语言的基本概念 (1)机器语言,汇编语言,汇编程序,汇编语言源程序,目标程序,目标代码,可执行程序。 (2)汇编语言的特点 (3)为什么要学习汇编语言,汇编语言的应用场合。 2.数据的表示和类型 (1)数值数据的表示,符号扩展,数值数据的表示范围,BCD码,不同数据之间的转换。 (2)非数值数据类型:字节、字、双字等。 3.几种基本的罗辑运算 “与”、“或”、“非”、“异或” 4.Intel 8088/8086微处理器基本概念 (1)8086/8088基本结构:执行单元EU,总线接口单元BIU,指令的执行次序。

(新)汇编语言课程设计四则运算

计算机与信息工程学院《汇编语言》课程设计四则运算器的设计 专业:计算机科学与技术 班级:控制11-2班 姓名: 倪天天 学号:2011025745 指导教师:郝维来 2013年6月28日

摘要 计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。 关键词:计算器,汇编语言,四则运算,功能模块

Abstract Calculator is the easiest calculation tools, a simple calculator with addition, subtraction, multiplication, division four arithmetic functions. Want to use assembly language to achieve a simple calculator, you must pass on the data storage, register usage, addition, subtraction, and related instructions such as assembly language module calls the use of knowledge in order to achieve a basic functional, user-friendly, easy to operate easy calculator. Using assembly language to achieve a simple calculator also involves the design of input and output modules, the judgment of arithmetic operations and exit the program to judge design. Through the rational use of various commands, design various functional modules. When implementing various program modules, through a call to the ultimate realization of the program a simple calculator. Keyword:Calculator, assembly language, four arithmetic, functional modules

汇编语言之程序的基本结构

第6章程序的基本结构在前面几章,我们分别介绍了用汇编语言进行程序设计所需要的几个最基本的知识:内存单元的寻址方式,变量定义和各种汇编指令格式。在掌握了这些基本内容之后,就需要学习如何把它们组成一个完整的汇编语言程序。 6.1 源程序的基本组成 汇编语言源程序的组成部分有:模块、段、子程序和宏等。一个模块对应一个目标文件,当开发较大型的应用程序时,该程序可能由若干个目标文件或库结合而成的。有关模块和子程序的知识和宏在第7章介绍,有关宏的知识将在第9章中叙述。 6.1.1 段的定义 微机系统的内存是分段管理的,为了与之相对应,汇编语言源程序也分若干个段来构成。8086CPU有四个段寄存器,在该系统环境下运行的程序在某个时刻最多可访问四个段,而80386及其以后的CPU都含有六个段寄存器,于是,在这些系统环境下开发的运行程序在某个时刻最多可访问六个段。 不论程序在某个时刻最多能访问多少个段,在编程序时,程序员都可以定义比该段数更多的段。在通常情况下,一个段的长度不能超过64K,在80386及其以后系统的保护方式下,段基地址是32位,段的最大长度可达4G。 段的长度是指该段所占的字节数:

、如果段是数据段,则其长度是其所有变量所占字节数的总和; 、如果段是代码段,则其长度是其所有指令所占字节数的总和。 在定义段时,每个段都有一个段名。在取段名时,要取一个具有一定含义的段名。 段定义的一般格式如下: 段名 SEGMENT [对齐类型] [组合类型] [类别] …;段内的具体内容 … 段名 ENDS 其中:“段名”必须是一个合法的标识符,前后二个段名要相同。可选项“对齐类型”、“组合类型”和“类别”的说明作用请见6.3节中的叙述。 一个数据段的定义例子: DATA1 S EGMENT word1 D W 1, 9078H, ? byte1 D B 21, 'World' DD 12345678H DATA1 E NDS 一个代码段的例子: CODE1 S EGMENT

一些常用的汇编语言指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器存储器操作数传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器存储器操作数传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。 LES :同上,只是16位段基址送ES中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数,操作数不能是CS和立即数 标志操作指令 LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH 指定的位。不影响标志位。 SAHF:与上相反,把AH中的标志位传送回标志寄存器。 PUSHF:把标志寄存器内容压入栈顶。 POPF:把栈顶的一个字节传送到标志寄存器中。 CLC:进位位清零。 STC:进位位为1。 CMC:进位位取反。 CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。 STD:DF为1。 CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。 STI:IF为1。 加减运算指令

注意:对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD。 ADC:把进位CF中的数值加上去。 INC:加1指令 SUB。 SBB:把进位CF中数值减去。 DEC:减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。 乘除运算指令 MUL 操作数:无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。IMUL 操作数:有符号数乘法指令。基本与MUL相同。 DIV 操作数:被除数是在AX(除数8位)或者DX和AX(除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV:有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW,CWD:把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT:取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志) SF(符号)反映运算结果,AF(辅助进位)未定义。自己与自己AND值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1)OR 操作数1 操作数2:自己与自己OR值不变,CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志)SF(符号)反映运算结果,AF(辅助进位)未定义。她使用于将若干位置1:

汇编语言王爽第二版课后答案

第一章基础知识 检测点1.1(第8页) ---------------------- (1) 13 (2) 1024,0,1023 (3) 8192,1024 (4) 2^30,2^20,2^10 (5) 64,1,16,4 (6) 1,1,2,2,4 (7) 512,256 (8) 二进制 注意: 1.第4题中的符号'^'指求幂运算(如: 2^30指2的30次方) 第二章寄存器(CPU工作原理) 检测点2.1(第18页) ---------------------- (1)写出每条汇编指令执行后相关寄存器中的值。第一空:F4A3H 第二空:31A3H 第三空:3123H 第四空:6246H 第五空:826CH 第六空:6246H 第七空:826CH 第八空:04D8H 第九空:0482H 第十空:6C82H 第十一空:D882H 第十二空:D888H 第十三空:D810H 第十四空:6246H (2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解答如下: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2(第23页) ---------------------- (1)00010H,1000FH (2)1001H,2000H 第2题说明: 因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于2000H时CPU都无法寻到。 检测点2.3(第33页) ----------------------答:CPU修改了4次IP的值。 情况如下: 第1次:执行完mov ax,bx后 第2次:执行完sub ax,ax后 第3次:读入jmp ax后 第4次:执行完jmp ax后 最后IP的值为0 实验1 查看CPU和内存,用机器指令和汇编指令编程(第33页) ----------------------------------------------------- 1.预备知识:Debug的使用 <此部分略> 2.实验任务(第43页) (1) <此部分略> (2) <此部分略> (3) 通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。此生产日期不能被改变,因为其具有‘只读’属性。 (4) 通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输出到屏幕上。<注:关于显存的详细讨论不在此题范围> 第三章寄存器(内存访问) 检测点3.1(第52页) ---------------------- (1)(题目:略) 第一空:2662H 第二空:E626H 第三空:E626H 第四空:2662H 第五空:D6E6H 第六空:FD48H 第七空:2C14H 第八空:0000H 第九空:00E6H 第十空:0000H 第十一空:0026H 第十二空:000CH 提示:此题可在DEBUG中利用E命令在本机上按照题目中所给出的内存单元及其数据进行相应地修改,然后再用A命令进行写入(题目中所给出的)相应的汇编指令,最后再进行T命令进行逐步执行,以查看相应结果。

相关文档
最新文档