汇编语言复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言复习资料
一.名词解释(16分8道题15个里选8个)
存储器:存储程序数据等信息的记忆装置,微机有ram和rom两种。
堆栈:以后进先出方式工作的存储空间。
状态标志:记录指令操作结果的标志,共6位:of,sf,zf,af,pf和cf。
段寄存器:保存各逻辑段的起始地址的寄存器,8086?8088机有4个:cs,ds,ss,es。
物理地址:唯一代表存储空间中每个字节单元地址。
汇编语言:用指令的助记符、符号地址、标号等符号书写程序的语言。
机器语言:能被计算机识别的语言。
汇编程序:把汇编语言程序翻译成机器语言程序的系统程序。
指令:告诉cpu要执行的操作(一般还要指出操作数地址),在程序运行时执行。
伪指令:由汇编程序在汇编过程中执行的指令。
Cpu:分析、控制并执行指令的部件,由算术逻辑部件alu和寄存器组成。
Ip:指示下一条要执行的指令的地址。
Sp:保存当前栈顶地址的寄存器。
控制地址:控制操作的标志,如df位。
连接程序:把若干个模块连接起来成为可执行文件的系统程序。
二.判断(10个)
考点:(1)mov指令ppt中
(2)第一章中n个二进制数表示的数的范围,分为有符号数和无符号数范围
(3)asc码表(空格、回车、数字、字母)后面有一个程序分析题。
记ABCZabcz对应的值(4)上机debug中命令,如:—d
(5)dup
下面判断题必考
1.MOV DS,AX ( )
2.MOV CS,AX ( )
3.MOV CH,4050H ( )
4.MOV DL,5BH ( )
5.MOV DX,5BH ( )
6.MOV DX,AL ( )
7.MOV V A1,V A2 ( )
8.MOV 45,DL ( )
三.解答题(7道)
{(1)段地址,偏移地址的范围注:课件上有个小例子
(2)与、或、异或三个指令应用
(3)栈指令实现交换[PUSH PUSH POP POP]}
注意:问题问得很详细,注意不要少写答案
1.书上3.8题假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名V AL的偏移地址值为0050H,是指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?
(1)MOV AX,0ABH 立即数寻址无物理地址
(2)MOV AX,BX 寄存器寻址无物理地址
(3)MOV AX,[100] 直接寻址20100H
(4)MOV AX,VAL 直接寻址20050H
(5) MOV AX,[BX] 寄存器间接寻址20100H
(6) MOV AX,ES:[BX] 直接寻址21100H
(7) MOV AX,[BP] 寄存器间接寻址20010H
(8)MOV AX,[SI] 寄存器间接寻址200A0H
(9) MOV AX,[BX+10] 寄存器相对寻址20110H
(10)MOV AX,VAL[BX] 寄存器相对寻址20150H
(11) MOV AX,[BX][SI] 基址变址寻址201A0H
(12) MOV AX,VAL[BX][SI] 相对基相变址寻址201F0H
2.书上
3.10如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别?指令执行完后AX寄存器的内容是什么?
(1)MOV AX,TABLE 是把符号地址TABLE里的内容送到AX里,指令执行完后,(AX)=1234H
(2)LEA AX,TABLE 是把符号地址TABLE 的有效地址(这里是偏移量)送到指定寄存器AX里,指令执行完后,(AX)=0032H
书上3.15求出一下各十六进制数与十六进制数62A0之和,并根据结果设置标志位SF、ZF、CF和OF的值。
运算结果:SF,ZF,CF,OF各位的值(从左至右依次往下~)
(1)1234 结果为74D4H SF=0 ZF=0 CF=0 OF=0
(2)4321 结果为A5C1H SF=1 ZF=0 CF=0 OF=1
(3) CFA0 结果为4240 H SF=0 ZF=0 CF=1 OF=0
(4)9D60 结果为0000 H SF=0 ZF=1 CF=1 OF=0
3.书上3.16求出一下各十六进制数与十六进制数4AE0之差,并根据结果设置标志位SF、ZF、CF和OF的值。
(1)1234 结果为5D14 SF=0 ZF=0 CF=0 OF=0
(2)5D90 结果为A870 SF=1 ZF=0 CF=0 OF=1
(3)9090 结果为D870 SF=1 ZF=0 CF=0 OF=0
(4)EA04 结果为34E4 SF=0 ZF=0 CF=1 OF=0
4.书上3.17写出执行以下计算的指令序列,其中X、Y、Z、R和W均为存放16位带符号数单元地址。
(1)Z——W+(Z—X)
MOV AX,Z ;把Z送到AX
SUB AX,X ;Z-X
ADD AX,W ;W+(Z-X)
MOV Z,AX ;结果保存在Z中
(2). Z——W—(X+6)—(R+9)
MOV AX,R ;R送到AX中
ADD AX,9 ;R+9
MOV BX,X ;X送到BX中
ADD BX,6 ;X+6
ADD AX,BX ;(R+9)+(X+6),结果保存在AX中
MOV BX,W ;W送到BX中
SUB BX,AX ;W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和~ MOV Z,BX ;最终结果送到Z中
前两道题中必考一道
(3)Z——(W*X)/(Y+6),R——余数
MOV AX,W ;把W送到AX
IMUL X ;W*X 注意:低十六位保存在AX里,高十六位保存在DX里MOV BX,Y ;把Y送到BX
ADD BX,6 ;Y+6
IDIV BX ;(W*X)/(Y+6) 注意:商保存在AX里,余数保存在DX里
MOV Z,AX ;把商送到Z中,
MOV R,DX ;把余数送到R中
(4)Z——((W—X)/5*Y)*2
MOV AX,W ;把W送到AX中
SUB AX,X ;W-X
CWD ;把AX中的十六位带符号数扩展成为32位,低十六位保存在AX中,高十六位保;在DX中
MOV BX,5 ;把5送到BX中
IDIV BX ;(W-X)/5 被除数为32位,除数为16位商为16位
IMUL Y ;上一步结果再乖以Y,积为32位
MOV BX,2 ;把2送到BX中
IMUL BX ;上一步乘法所得的积再乘以2,各为64位MOV Z,EAX ;把结果中低32位放入Z双字单元中
MOV [Z+4],EDX ;把结果中高32位放入Z+4双字单元中
两道必考一道
书上3.18已知程序段如下:
MOV AX,1234H
MOV CL,4
ROL AX,CL
DEC AX
MOV CX,4
MUL CX
INT 20H
(1)每条指令执行完后,AX寄存器的内容是什么?
(2)每条指令执行完后,进位、符号和零标志的值是什么?
(3)程序结束时,AX和DX的内容是什么?
答:本条指令执行完后AX的内容执行完后CF,SF,ZF的值
MOV AX,1234H 1234H 0 0 0
MOV CL,4 1234H 0 0 0
ROL AX,CL 2341H 1 0 0
DEC AX 2340H 1 0 0
MOV CX,4 2340H 1 0 0
MUL CX 8918H 0 0 0
INT 20H
程序结束后,(AX)=8918H (DX)=0000H
5.书上3.28下列程序段执行完以后,BX寄存器中的内容是什么?MOV CL,3
MOV BX,0B7H
ROL BX,1
ROR BX,CL
该程序段执行完后,BX寄存器的内容是:C02DH
四.程序补充分析(6道题3个补充1个分析2个写功能)书上例题3.76 3.77 3.80
课件上jmp jcc小程序
五.改错(1道题10分)
题下面给出一个有病句的程序(error.exe),请阅读修改:
实现功能:在屏幕上显示:Hello world
My name is DJX
1 data segment
2 out1 db 'Hello world'
3 ax db 'My name is DJX'
4 data ens
6 code segment
7 assume cs:code,ds:data
8 start: ?????????lea dx,out1 mov ax,data
9 mov ah,2 mov ds,ax
10 int 21h
12 mov dl,0ah
13 mov ah,2
14 int 21h
15 mov dl,0dh
16 moo ah,2
17 int 21h
18 lea dx,ax
29 mov ah, 9
20 int 21h ?????
21 code ends
22 end start
:
六.程序编程(三道题分别为8分、7分、五分)
第一道题是循环体
例:从键盘接收十进制数并存入BX
1 2 5
31 32 35
……
mov bx, 0
newchar: mov ah, 1 ;键盘输入
int 21h
sub al, 30h
jl exit ; <0退出
cmp al, 9
jg exit ; >9退出
cbw
xchg ax, bx ( ( 0×10)+1 )×10+2 )×10+5
mov cx, 10
mul cx 算法:bx初值为0,(bx)=(bx)*10+ax
但是乘法需要ax乘,所以xchg使用
xchg ax, bx
add bx, ax
jmp newchar
exit: ……
第二道是分支题
如:例:编写汇编程序,要求对键盘输入的小写字母用大写字母显示出来。
code segment
assume cs:code
start:
again:
mov ah,1
int 21h
cmp al,61h
jb again
cmp al,7Ah
ja again
sub al,20h
mov dl,al
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
例:编写汇编程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,并按顺序显示这三个字符。
code segment
assume cs:code
start:
again:
mov ah,1
int 21h
cmp al,61h
jbe again
cmp al,7Ah
jae again
sub al,2
mov cx,3
mov dl,al
print:
inc dl
mov ah,2
int 21h
loop print
code ends
end start
第三道题是第五章的和第六章综合。