汇编语言程序设计知识点Word格式文档下载.docx
- 文档编号:18915087
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:17
- 大小:24.04KB
汇编语言程序设计知识点Word格式文档下载.docx
《汇编语言程序设计知识点Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计知识点Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
1.MOVDX,[1000H]直接寻址11000H
2.MOBDX,[BX]寄存器间接寻址10100H
3.MOVDX,OVAR[BP]寄存器相对寻址10250H
4.MOVDX,[BX+SI]寄存器相对寻址13100H
5.MOVDX,OVAR[BX][SI]相对基址变址寻址13150H
(2)数据传送指令(通用数据传送指令、累加器专用传送指令)
算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:
目的操作数必须是累加器)
除法指令(*被除数在累加器中,除法指令执行完以后,商和余数?
)
逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)
串处理指令(与REP相配合工作的MOVS、STOS、LODS指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)
控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序、中断)
1、将首地址为STRING的字节数组的第7个元素(编号从0开始)送到累加器AL中,用SI寄存器相对寻址的指令为:
MOVSI6H和MOVALSTRING[SI]。
2、下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRINGDB‘BASEDADDRESSING’
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。
MOVDHCSRTING
MOVDLCSRTING+7-1
3、如果JMP指令采用段间间接寻址,那么转移地址存放在4个相邻字节单元中,其中前两个字节存放的是偏移地址,而后两个字节存放的是段地址。
4、重复前缀指令REP的重复次数由计数寄存器CountReg决定。
5、在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是CountReg=0或ZF=0
6、当标志位CF=1时表示无符号数运算产生溢出,而当标志位OF=1是表示带符号数运算产生溢出。
7、AL和VAR字节单元中分别存放一个带符号数,执行CMPAL,VAR时,如果AL>
VAR,那么溢出位和符号位的关系是。
(OF=SF,还有发生溢出的情况,AL-VAL尽管为负,但OF=1,说明是由于结果太大(负的太大)超出了带符号数的表示范围使得符号位为负的,正确的结果应该为正。
8、循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是ZF=0且CountReg≠0。
9.设SP=4AH,执行段内返回指令RET4后,SP的值是 50H 。
10.条件转移指令的转移范围?
(只能做段内的短转移)
11.转移指令JMPNEARPTRPROCA的转移范围是8000H~7FFFH 。
12.计算机系统通过 主机系统 和外部设备通信。
DOS系统功能调用方式为:
(1)设置入口参数;
(2)中断程序编号送AH寄存器后执行INT21H。
(教材Page320,page335)
13.阅读下面的程序片段,并分析执行结果。
MOVAX,723AH
MOVBX,0C86BH
SUBAL,BL
SBBAH,BH
XORAL,01H
ADCAX,0
执行该程序片段后:
(AX)=0A9CEH,CF=0,OF=0。
(XOR使CF/OF为0)
第四章汇编语言程序格式
(1)伪操作:
数据定义及存储器分配伪操作,表达式赋值伪操作EQU,段定义伪操作、程序开始和结束伪操作、对准伪操作、基数控制伪操作。
(2)汇编语言程序格式:
汇编语言源程序中的每个语句的组成格式:
名字项、操作项(包括?
)、操作数项和注释项
1、在某数据段内定义变量
BUFFERDB30DUP(20)
表达式TYPEBUFFER的值为1。
2.BUFlDB3DUP(0,2DUP(1,2),3)
COUNTEQU$-BUFl
变量COUNT的值是18。
3.DATASEGMENT
DB2EHDUP(0)
VAR1DB12H,34H
VAR2DB10HDUP(O)
ADR1DWVAR1,VAR2
DATAENDS
为使ADR1+2字存储单元中内容为0030H,横线上应选用的语句是_ORG$+30H_______。
4.BUFDW4,6,$+2,若汇编时BUF分配的偏移地址是0042H,则汇编后BUF数组中第三个字的值是0048H。
5、设某数据段:
DATASEGMENT
ORG20H
NUM1=8
NUM2=NUM1+10H
DA1DB‘COMPUTER’
DB0AH,0DH
COUNTEQU$-DA1
DA2DW‘CO’,’MP’,’UT,’ER’
请回答:
(1)DA1的偏移地址是:
20H。
(2)COUNT的值是0AH。
(3)DA2+5字节单元的内容是‘U’的ASCII码。
(DW/DB储存字符串的方式不同)
6、执行下列指令序列后,AX寄存器中的内容是什么?
TABLEDW10,20,30,40,50
ENTRYDW3
……
MOVBX,OFFSETTABLE
ADDBX,ENTRY
MOVAX,[BX]
1E00H
7.下面指令执行后,变量DAB中的内容是__0F5H______。
DAWDW2A05H
DABDB0FAH
:
MOVAL,BYTEPRTDAW
SUBDAB,AL
第五章循环与分支程序设计
(1)循环程序结构,分支程序结构
eg.BEG为起始地址的存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。
请在空行处各填上一条指令完善该程序。
MOVCX,31H
LEASI,BEG
MOVDI,SI
ADDDI,99
DON:
MOVAL,[SI]
XCHGAL,[DI]
MOV[SI],AL
INCSI
DECDI
LOOPDON
1、阅读如下程序段:
ADRRDBXXH,XXH,……,XXH
NUMEQU$-ADRR;
NUM为ADRR数组空间大小
RETTDB?
…
MOVCX,NUM;
CX中存放ADRR数组空间大小
MOVBX,-1
DON:
INCBX;
BX值增一
CMPADRR[BX],0;
访问ADRR数组中偏移地址为BX的值并与0比较
LOOPZDON;
若大于0则继续DON循环
JNZNEXT;
否则转至NEXT
MOVBL,OFFH;
若循环完未转至NEXT,则BL中为OFFH
NEXT:
MOVRETT,BL;
将BL中址送RETT
HLT
请回答
(1)该程序完成的功能是什么?
在以Adrr为起始地址的数组中查找第一个非0数据
(2)程序执行后RETT字节单元中的内容是什么?
若找到非0数据,则将第一个非0数据在数组中的偏移量送入RETT单元中,若未找到,则将0FFH送入RETT单元中。
2、阅读程序段:
STRINGDB‘ABCDEFGHIJ‘
┇
MOVAH,01
INT21H
ANDAL,0FH;
这条语句等价于减去30H
DECAL
XORAH,AH;
以上三条语句是将1-9的ASCII码转换为1-9
MOVBX,OFFSETSTRING
ADDBX,AX;
BX+AX,即将BX中存放待输出字符的偏移地址
MOVBL,[BX];
将STRING中偏移地址为BX的字符取出
MOVAH,02H
INT21H
┇
请回答:
(1)上述程序段的功能是什么?
上述程序段的功能是根据从键盘输入的字符‘1’~‘9’,确定在显示器上显示STRING中第几个字符。
(2)从键盘输入字符‘4’,程序段有什么结果?
输出’D’
3、阅读程序段:
BLOCKDB20H,1FH,08H,81H,OFFH…
RESULTDB?
…
START:
LEASI,BLOCK;
使SI指向BLOCK单元首地址
MOVCX,[SI];
将SI地址中操作数传送到CX寄存器中
INCSI;
SI指向下一个地址
MOVAL,[SI];
将SI中操作数传送到AL寄存器中
LOP1:
CMPAL,[SI+1];
比较BLOCK/BLOCK+1地址中操作数
JNGNEXT;
若BLOCK〉BLOCK+1则转至NEXT
MOVAL,[SI+1];
否则将BLOCK+1中数送入AL寄存器
NEXT:
LOOPLOP1;
循环执行LOP1
MOVRESULT,AL;
将AL中数送入RESULT中
问:
(1)该程序完成的功能是从32个有符号数中找出最小的送入RESULT中。
(2)该程序循环的次数是31次。
4、下列程序片段用来分别统计ARRAY数组中奇数和偶数的个数。
请在空白处填写合适的指令。
DATASEGMENT
ARRAYDW23ABH,1570H,567,1765H,46,5210H
COUNTEQU($-ARRAY)/2;
COUNT为数组中元素个数
DA1DB?
DA2DB?
LEASI,ARRAY;
SI中存放ARRAY首地址
MOVCX,COUNT;
CX中存放数组元素个数
MOVAX,[SI];
将ARRAY中偏移地址为SI的元素送AX
TESTAX,0001H;
最低为为1则为奇数,否则为偶数
JZLOP2
INCBL
JMPLOP3
LOP2:
INCBH
LOP3:
ADDSI,2;
SI地址值增2
DECCX
JNZLOP1
MOVDA1,BL
MOVDA2,BH
5.阅读如下程序片段,回答所提出的问题,假定X1,X2,…XN为无符号数。
ORG100H
BLOKDWX1,X2,…,XN
COUNTEQU($-BLOK)/2
RESULTDW?
…
LEABX,BLOK-2
MOVCX,COUNT
XORAX,AX
GOON:
ADDBX,2
CMPAX,[BX]
JAENEXT
MOVAX,[BX]
NEXT:
LOOPGOON
MOVRESULT,AX
程序片段执行完后,RESULT字单元的内容= MAX(X1,X2…Xn) ,
(BX)=100H+2*(COUNT-1),程序循环次数=COUNT。
6.下列程序片段调用单个字符显示的2号功能显示STRING中的字符串‘COMPUTER’(不显示字符‘$’)。
(调用DOS的2号功能实现)
STRINGDB‘COMPUTER’,‘$’
设AX,BX中的数一个为正数,一个为负数,编写程序片段完成将正数送到PLW单元中存放。
编程实现:
TESTAX,8000H
JEK1或JZK1
MOVPLW,BW
JMPDONE
K1:
MOVPLW,AX
DONE:
7、将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别存放在AL、BL、CL、DL寄存器中。
DATAREASEGMENT
TEMPDB4DUP(?
DATAREAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATAREA
MOVDS,DATAREA
START:
MOVCL,4
MOVCH,4
LEABX,TEMP;
将TEMP地址值送BX
ROTATE:
MOVDX,AX;
将AX寄存器值送DX
ANDDL,0FH;
将DX寄存器高8位清零
MOV[BX],DL;
DX寄存器低8位地址送入BX中
INCBX;
BX增1
SHRAX,CL;
逻辑作揖
DECCH;
循环数减1
JNZROTATE;
若循环未完成则继续循环
MOVE:
MOVDL,TEMP+1
MOVCL,TEMP+2
MOVBL,TEMP+3
MOVAL,TEMP+4
MAINENDP
CODEENDS
ENDSTART
8、已定义了两个整数变量A、B,试编写程序完成下列功能:
1、若两个数中有一个是奇数,则将奇数存放在A中,偶数存放在B中。
2、若两个数均为奇数,则将两数均加1后存回原变量。
ADW?
BDW?
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:
CSEG,DS:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATAREA
MOVDS,AX
BEGIN:
MOVAX,A
MOVBX,B
XORAX,BX;
AX,BX异或
TESTAX,0001H;
测试最低位,0则两数同奇偶
JZCLASS;
为0则转至CLASS
TESTBX,0001H;
若最低位为0则为偶数,否则为奇数
JZEXIT;
为0则转至EXIT
XCHGBX,A;
交换BX/A中值,即A中存放奇数
MOVB,BX;
将BX中数送入B中,B中存放偶数
JMPEXIT
CLASS:
测试BX是否为奇数
不是则转至EXIT
INCB;
否则B自增1
INCA;
A自增1
EXIT:
RET
CSEGENDS
ENDSTART
9、判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置全1。
答:
XORAH,AL;
异或判定是否相同,结果存放在AH中
ANDAH,40H;
将除第三位外的所有位置0
JNZONE;
若不为0,即不相等,转至ONE
MOVAH,0;
否则AH置0
JMPNEXT
ONE:
MOVAH,0FFH;
AH置全1
……
10、实现下列算式:
W=X+Y+36-Z。
设X、Y、Z、W均为双字长数据,各自的低十六位数和高十六位数分别存放在X、X+2、Y、Y+2、Z、Z+2的存储单元中,结果的低十六位字和高十六位字分别存放在W和W+2两个单元中。
XDD
YDD
ZDD
WDD
DATA
MOVAX,X
ADDAX,Y
MOVBX,X+2
ADCBX,Y+2
ADDAX,36
ADCBX,0
SUBAX,Z
SBBBX,Z+2
MOVW,AX
MOVW+2,BX
11、写出执行以下计算的指令序列,其中U、V、W和Z均为存放16位带符号数单元的地址。
Z←W-(U+6)-(V+9)
MOVAX,U
ADDAX,6
MOVCX,V
ADDCX,9
MOVBX,W
SUBBX,AX
SBBBX,CX
MOVZ,BX
12、试编写一程序段求出双字长数的绝对值。
双字长数在A和A+2单元中,结果存放在B和B+2单元中。
MOVAX,A
MOVDX,A+2
CMPDX,0
JNSZHENGSHU
NEGDX;
求补
NEGAX;
SBBDX,0;
减1,即求出对应正数
ZHENGSHU:
MOVB,AX
MOVB+2,DX
INT20H
13.从键盘输入一个以$为结束符的字符串,统计其中的非数字字符个数。
DSEGSEGMENT
BUFFDB50DUP(‘’)
MOVCOUNT,0
INPUT:
MOVAH,01;
INT21H
MOV[BX],AL
INCBX
CMPAL,’$’;
JNZINPUT;
LEABX,BUFF;
MOVCL,[BX]
CMPCL,’$’;
JZDISP
CMPCL,30H;
JBNEXT
CMPCL,39H;
JANEXT
INCCOUNT;
DISP:
|;
14.把0~100之间的30个数存入以GRADE为首地址的30字数组中,GRADE+i表示学号为i+1的学生的成绩。
另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。
编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。
(一个学生的名次等于成绩高于这个学生的人数加1。
程序如下:
GRADEDW30DUP(?
RANKDW30DUP(?
;
-----------------------------------------------------
ASSUMECS:
CSEG,DS:
DSEG
PUSHDS;
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;
MOVDI,0
MOVCX,30;
LOOP1:
PUSHCX
MOVSI,0
MOVAX,GRADE[DI]
M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 知识点