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

上传人:b****7 文档编号:16395725 上传时间:2023-07-13 格式:DOCX 页数:21 大小:24.26KB
下载 相关 举报
汇编语言程序设计知识点.docx_第1页
第1页 / 共21页
汇编语言程序设计知识点.docx_第2页
第2页 / 共21页
汇编语言程序设计知识点.docx_第3页
第3页 / 共21页
汇编语言程序设计知识点.docx_第4页
第4页 / 共21页
汇编语言程序设计知识点.docx_第5页
第5页 / 共21页
汇编语言程序设计知识点.docx_第6页
第6页 / 共21页
汇编语言程序设计知识点.docx_第7页
第7页 / 共21页
汇编语言程序设计知识点.docx_第8页
第8页 / 共21页
汇编语言程序设计知识点.docx_第9页
第9页 / 共21页
汇编语言程序设计知识点.docx_第10页
第10页 / 共21页
汇编语言程序设计知识点.docx_第11页
第11页 / 共21页
汇编语言程序设计知识点.docx_第12页
第12页 / 共21页
汇编语言程序设计知识点.docx_第13页
第13页 / 共21页
汇编语言程序设计知识点.docx_第14页
第14页 / 共21页
汇编语言程序设计知识点.docx_第15页
第15页 / 共21页
汇编语言程序设计知识点.docx_第16页
第16页 / 共21页
汇编语言程序设计知识点.docx_第17页
第17页 / 共21页
汇编语言程序设计知识点.docx_第18页
第18页 / 共21页
汇编语言程序设计知识点.docx_第19页
第19页 / 共21页
汇编语言程序设计知识点.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《汇编语言程序设计知识点.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计知识点.docx(21页珍藏版)》请在冰点文库上搜索。

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

汇编语言程序设计知识点

汇编语言程序设计知识点

第一章基础知识

(1)正负数的补码表示,掌握计算机中数和字符的表示;

1、假设机器字长为8位,[+3]补=00000011B,[-3]补=FDH。

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,那么执行指令LDSSI,[SI]以后,(SI)=0235H,(DS)=0E60H.

第三章80x86的指令系统和寻址方式

(1)与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址).数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:

目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?

))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。

1、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?

其物理地址值是多少?

(1)MOVAX,0ABH立即寻址操作数在指令中

(2)MOVAX,BX寄存器寻址操作数为(BX)=0100H

(3)MOVAX,[100H]直接寻址20100H

(4)MOVAX,VAL直接寻址20050H

(5)MOVAX,[BX]寄存器间接寻址20100H

(6)MOVAX,ES:

[BX]寄存器间接寻址21100H

(7)MOVAX,[BP]寄存器间接寻址15010H(BP默认段为SS)

(8)MOVAX,[SI]寄存器间接寻址200A0H

(9)MOVAX,[BX+10]寄存器相对寻址20110H

(10)MOVAX,VAL[BX]寄存器相对寻址20150H

(11)MOVAX,[BX][SI]基址变址寻址201A0H

(12)MOVAX,VAL[BX][SI]相对基址变址寻址201F0H

2、假定(DS)=1000H,(SS)=2000H,(SI)=3000H,(BX)=0100H,(BP)=0200H,数据段中变量名为OVAR的偏移地址值为0050H,请指出下列源操作数的寻址方式是什么?

其物理地址值是多少?

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’

DATAENDS

请回答:

(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:

INCSI;SI指向下一个地址

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?

DATAENDS

……

LEASI,ARRAY;SI中存放ARRAY首地址

MOVCX,COUNT;CX中存放数组元素个数

LOP1:

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后存回原变量。

DATAREASEGMENT

ADW?

BDW?

DATAREAENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DATAREA

START:

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:

TESTBX,0001H;测试BX是否为奇数

JZEXIT;不是则转至EXIT

INCB;否则B自增1

INCA;A自增1

EXIT:

RET

MAINENDP

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

NEXT:

……

10、实现下列算式:

W=X+Y+36-Z。

设X、Y、Z、W均为双字长数据,各自的低十六位数和高十六位数分别存放在X、X+2、Y、Y+2、Z、Z+2的存储单元中,结果的低十六位字和高十六位字分别存放在W和W+2两个单元中。

答:

DATASEGMENT

XDD

YDD

ZDD

WDD

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVDS,AX

MOVAX,X

ADDAX,Y

MOVBX,X+2

ADCBX,Y+2

ADDAX,36

ADCBX,0

SUBAX,Z

SBBBX,Z+2

MOVW,AX

MOVW+2,BX

CODEENDS

ENDSTART

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;

NEXT:

MOVCL,[BX]

INCBX

CMPCL,’$’;

JZDISP

CMPCL,30H;

JBNEXT

CMPCL,39H;

JANEXT

INCCOUNT;

JMPNEXT

DISP:

|;

14.把0~100之间的30个数存入以GRADE为首地址的30字数组中,GRADE+i表示学号为i+1的学生的成绩。

另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。

编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。

(一个学生的名次等于成绩高于这个学生的人数加1。

答:

程序如下:

DSEGSEGMENT

GRADEDW30DUP(?

RANKDW30DUP(?

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

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DSEG

START:

PUSHDS;

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX;

BEGIN:

MOVDI,0

MOVCX,30;

LOOP1:

PUSHCX

MOVCX,30;

MOVSI,0

MOVAX,GRADE[DI]

MOVDX,1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2