汇编语言8086 期末考试 笔记总结(内容补充)【个人复习向】【欢迎各位斧正错误之处】(所借鉴部分资料侵删)

本文详细介绍了8086CPU的组成部分,包括寄存器类型、内存地址结构、分段方式、指令如mov和add的使用,以及标志寄存器的作用。内容涵盖了内存管理、栈操作和基本的汇编语言指令,如mul和标志位处理。
摘要由CSDN通过智能技术生成

注:参考书是王爽老师的《汇编语言第3版)

1.CPU的组成

运算器用于信息处理;寄存器用于信息存储;内部总线实现cpu内部的各种联系;控制器协调各种器件

8086有14个寄存器

通用寄存器:AX BX CX DX

变址寄存器:SI DI

指针寄存器:SP BP

指针指令寄存器:IP

段寄存器:CS SS DS ES

标志向寄存器:PSW

它们之间的共性在于 寄存器都是16(0-15)位的,可以存放两个字节

思考:如何保证不同代寄存器的兼容性呢?通用寄存器均可以分为两个独立的8位寄存器使用

                因此可以细化,例如 AX分为AH  AL

8086是16位CPU,因此称其字长为16BIT

一个字可以存在一个16位寄存器中,这个字的高位字节存在这个寄存器的高8位寄存器中,这个字的低位字节存在这个寄存器的低8位寄存器

2.mov 和 add 指令

mov:

        mov ax 20;将20送入ax,数字后面不写H默认为10进制

        mov ax bx;将bx中的送入ax

add:

        add ax 9;将寄存器AX中的数值加上9

         add ax bx;ax=bx+ax(需要注意溢出问题)

3.物理地址

cpu访问内存单元是要给出内存单元的地址

所有的内存单元的存储空间是一个以为的线性空间

每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称作物理地址

事实上,8086有20位地址总线,可以传送20位地址,寻址能力为1M

8086是16位结构的CPU

运算器一次最多可以处理16位数据,寄存器最大宽度也为16位,在8086内部处理与传输、暂存的也是16位,寻址能力也只有64k

解决方案:用两个16位地址合成一个20位的物理地址(段地址,偏移地址)

        物理地址:段地址*16+偏移地址

4.用分段方式管理内存

需要注意的是,内存并没有分段,段的划分来自于cpu

同一段内存,多种分段方案:

        段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数,一个段的长度最多为64k

5.CS IP

CS:代码段寄存器

IP:指令指针寄存器

执行何处的指令,取决于cs:ip

6.jmp指令

修改cs:ip的指令

        debug的R命令可以直接改变寄存器的值

        不能对cs/ip 使用mov

        因此使用转移指令jmp :jmp 段地址:偏移地址(如若想要仅仅修改ip的内容, jmp 某一合法寄存器 jmp ax (类似于 mov IP,ax))

7.内存中的字的存储

对于8086cpu,16位作为一个字

高八位放高字节,第八位放低字节

16位的字在内存中需要两个连续字节存储,怎么存放?

        低位字节在低地址单元,高位字节存在高地址单元

字单元:由连续的两个内存单元组成,存放一个字型数据(16位)

8.DS和【address】

cpu要读取一个内存单元的时候,必须先给出内存单元的地址

DS寄存器存放要访问数据的段地址,偏移地址用[......]给出

同时 ds不支持数据直接送入段寄存器 需要 mov ds bs

9.对内存单元数据的访问

可以根据需要将一组内存单元定义为一个段

物理地址=段地址*16+偏移地址

处理方法:(DS):(【address】)

10.mov指令操作数据

也可以使用 mov 段寄存器,寄存器

                mov 内存单元,段寄存器

                mov 段寄存器,内存单元

但不可以使用  mov 段寄存器,数据

11.栈操作的实现

push (入栈)

pop     (出栈)   ;把栈顶元素赋给到对应寄存器

两者都对字为单位进行操作

栈段寄存器ss:存放栈顶的段地址

栈顶指针寄存器sp:存放栈顶的偏移地址

        任何时刻,SS:SP指向栈顶元素

12.用汇编语言编写源程序

;伪指令

assume cs:coding;假设假设某一段寄存器与段相关联

codesg segment;段定义,存放代码,数据和栈空间,此处为段的开始

codesg ends;此处为段的结束

end;汇编程序的结束标志,每个汇编程序结束都要加

;程序返回

mov ax,4cooh

int 21h

源程序.acs经过编译连接后变为.exe

13.[...]和(...)

[...]表示一个内存单元,汇编语法规定

(...)表示一个内存单元或者寄存器里面的内容,为方便学习做出的约定,例如(ax)=0010H;只能用寄存器以及物理地址

再约定:idata表示常量,例如move ds,idata

14.inc指令

操作内容+1

15.Loop指令

loop 标号

        功能:实现循环

(需要注意的是,汇编程序中,数据不能以字母开头,因此形如ffff前面需要加0)

16.引入段前缀

mov al,[0];将DS:0储存单元的值传给AL,然而经过汇编后,含义变了

;对策是在【IDATA】前显示地写上了段寄存器

;mov al,ds[bx]

;mov al,ds:[bx]

访问连续的内存单元:使用loop和[bx]

注意:在汇编中直接写入地址是很危险的

dw;define word 定义字型数据,定义一个字,如0123H

db;定义一个字节

dd;定义一个双字

;以上定义不属于真正的代码

;可以通过定义一个标号,知识代码开始的位置,程序加载后,CS:IP指向要执行的第一条指令在start处

例如   start:

           end start

17.将数据、代码、栈放入到不同段之中

        data segment

        data ends

        stack segment

        stack ends

        code segment

        ;初始化各段寄存器

        ;入栈

        ;出栈

        code ends

18.处理字符问题

汇编程序中,用‘......’表示数据是以字符形式给出的,编译器将把他们转化为相对应的ASCII码

小写字母的ASCII码值比大写字母的码值大20H(32)

逻辑与指令:

and  des,src;与运算

or  dest,src;或运算

19.【bx+idata】寻址方式

[bx+idata]表示一个内存单元,他的偏移地址为(bx)+idata

20.SI和DI寄存器

变址寄存器:执行和地址有关的操作

功能类似于BX,不同在于SI和DI不能分成两个八位寄存器来使用

21.【bx+si】和【bx+di】方式指定地址

【BX+SI】表示一个内存单元,即BX中的数值加上SI中的数值

适用于一维数组的寻址

mov ax,[bx+si]

将一个内存单元的内容送入AX

这个内存单元的长度为2字节(字单元),存放一个字

偏移地址为BX中的数值加上SI中的数值

段地址在DS中

22.【bx+si+idata】和【bx+di+idata】方式指定地址

【bx+si+idata】表示一个内存单元

mov ax,[bx+si+idata]

将一个内存单元内容送入ax

这个内存单元为两字节,是字单元,存放一个字

偏移地址为bx中的数值加上si中的数值再加上idata,段地址在ds中

23.内存的寻址方式

24.用于寻址的寄存器

BX,SI,DI,BP可以用在【...】对内存进行单元寻址,bx以外的通用寄存器,段寄存器军不可以

此外【bx+bp】和【si+di】是错误的

BX和BP的区别在于:BX默认指的是DS段,而BP默认指的是SS段

25.数据在哪里?有多长?

汇编语言中数据位置的表达

        1.立即数 idata  2.寄存器   3.内存:段地址和偏移地址

处理的数据有多长?

        字操作 /字节操作 /word ptr 或者byte ptr指明长度

        ;把 字1 赋值给 ds段的 第0内存

26.div指令

div是除法指令,被除数默认放债AX或DX和AX中,除数8位或16位,在寄存器或者内存单元中

被除数 AX  DX和AX

除数   8位寄存器   16位内存或寄存器

商       AL       AX

余数    AH      DX

切记提前在默认的寄存器中设置好被除数,且默认寄存器不作别的用处

27.dup功能与用法

dup和dp/dw/dd等数据定义伪指令配合使用,用来进行数据的重复

   

    

28.offset

格式:offset标号

用于取得标号的偏移地址

29.jmp指令

无条件转移

可以仅仅修改IP,也可以同时需改cs和ip

jmp指令要给出两种信息:转移的目的地和转移的距离

根据转移距离的不同:

jmp:根据位移进行转移        

        JMP short 的机器指令中,包含的是跳转到指令的相对位置,而不是转移的目标位置

        

30.jcxz指令

指令格式:jcxz标号

功能:如果(CX)=0,则转移到标号处执行,当不等于0时,什么也不做(程序向下继续执行)

其中所有的条件转移指令都是段转移

ip修改范围位-128-127,在对应的机器码中包含转移的唯一,而不是目的地址

31.call和ret指令

call指令:调用子程序,实质上时流程转移,实现方法和jmp指令的原理类似

将当前的ip或ip和CS压入栈中,转移道标号中执行指令

相当于:

push ip

jmo near ptr 标号

        注意:call far ptr ;实现段间转移

             

32.ret和retf

                           

      

33.mul指令(乘法指令)

  格式:

mul  寄存器

mul  内存单元

        

34.标志寄存器

flag

16位寄存器,按照位起作用,每一位都有专门的含义,记录特定的信息

用来存储相关指令的执行结果

可以位cpu执行相关指令提供行为一句

用来控制cpu的相关工作方式

ZF-零标志

PF-奇数偶数标志

PF记录执行指令后,结果所有二进制位中1的个数

1的个数为偶数PF=1,为奇数PF=0

SF-符号标志

SF执行指令后,将结果计数视为有符号数

结果为-那么,SF=1,反之结果为+,SF=0

CF-进位标志

在进行无符号运算时,CF记录了运算结果最高有效位向更高位的进位值,或从更高维的错位值

CF记录指令执行后,有进位或者借位,CF=1,反之CF=0

OF-溢出标志

在进行有符号数进行运算时,如果结果超过了机器所能表示的范围,那么则称为一处

OF记录有符号数操作指令执行后,有一处,OF=1,反之OF=0

35.adc-带进位的加法指令

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.CPU要访问的某一存储单元的实际地址称(   )   A.段地址         B.偏移地址   C.物理地址        D.逻辑地址 2.某存储单元的物理地址是12345H,可以作为它的段地址有(   )   A.2345H        B.12345H   C.12340H       D.1234H 3.执行后使BX=0的同时也使CF=0,OF=0的指令是(   )   A.XOR BX,BX    B.OR BX,BX   C.AND BX,BX    D.CMP BX,BX 4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是(   )   A.CX≠0且ZF=1    B.CX≠0且ZF=0   C.CX≠0或ZF=1    D.CX≠0或ZF=0 5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是(   )   A.DAA校正指令的功能已自动加在AH中   B.进位值在AF中,校正后根据AF内容再加在AH中   C.进位值在CF中,校正后根据CF内容再加在AH中   D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中 6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是(   )   A.指令XOR AX,AX执行后,AX内容不变,但设置了标志位   B.指令OR DX,1000H执行后,将DX最高位置1,其余各位置0   C.指令AND AX,OFH执行后,分离出AL低四位   D.NOT AX,执行后,将AX清0 7.在执行下列指令时,需要使用段寄存器DS的指令是(   )   A.STOSW        B.ADD AL,CL   C.NEG BX       D.INC DA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是(   )   A.ADD BH,01H     B.OR BH,01H   C.XOR BH,01H     D.TEST BH,01H 9.完成对CL寄存器的内容乘以4的正确操作是(   )   A.ROL CL,1        B.MUL 4     ROL CL,1   C.SHL CL,1        D.MOV CL,2    SHL CL,1             SHL CL,CL 10.下面各传送指令中,正确的是(   )   A.MOV [DI],[SI]            B.MOV[DX+DI],AL   C.MOV WORD PTR [BX],0100H       D.MOV AL,BX 11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(   )   A.名字的第一个字符可以是大写英文字母及小写英文字母   B.名字的第一个字符可以是字母、数字及、@、_   C.名字的有效长度≤31个字符   D.在名字中不允许出现$ 12.要实现使BETA的值为56,应采用语句为(   )   A.BETA DB 56      B.BETA DB 56H   C.BETA EQU 56      D.BETA EQU 56H 13.REPZ CMPSW指令,重复执行的终止条件是(   )   A.CX=0或ZF=0      B.CX=0且ZF=0   C.CX=0或ZF=1      D.CX=0且ZF=1 14.下面程序段执行后,AL中的内容是(   )   MOV AX,8833H   ADD AL,AH   DAA   A.21       B.21H   C.0C1H      D.0DDH 15.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为(   )   A.ZF=1      B.ZF=0   C.SF=1      D.SF=0 16.检查二个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP AL,BL”指令后应跟的分支指令是(   )   A.JNC LOP1      B.JA  LOP1   C.JC LOP1      D.JGE  LOP1 17.在下列串操作指令中,同时使用源串和目的串地址指针的指令是(   )   A.STOSW      B.LODSW   C.SCASW      D.CMPSW 18.设AL=0AH,下列指令执行后能使AL=05H的是(   )   A.NOT AL         B.AND AL,0FH   C.XOR AL,0FH      D.OR AL,0FH19.DA1  DW‘AB’,‘CD’,‘EF’,‘GH’(   )     ┇    MOV AX,DA1+3  指令执行后AX中的内容是  A.‘EF’   B.‘CD’  C.‘BC’   D.‘FC’20.使用DOS系统功能调用时,使用的软中断指令是(   )  A.INT 21      B.INT 10H  C.INT 16H     D.INT 21H二、填空题(本大题共12空,每空0.5分,共6分)请在每小题的空格中填上正确答案。错填、不填均无分。21.十六进制数0FFF8H表示的十进制正数为________,表示的十进制负数为________。22.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,(SI+COUNT)中,源操作数的有效地址EA为________,其物理地址为________。23.CPU的标志寄存器中标志位,可以分为两大类,其中一类称为________标志位,另一类称为________标志位。24.当标志位________=1时表示无符号数运算产生溢出,而当标志位________=1是表示带符号数运算产生溢出。25.如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是________,而后两个字节存放的是________。26.在串操作程序中,通常在重复前缀指令REPZ或REPNZ后,选用的串操作指令是________或________才有实际意义。三、简答题(本大题共4小题,每小题2分,共8分)27.已知:BX=1357H,DI=2000H,DS=2000H,CS=4000H,分别指出下面各指令中存储器操作数的物理地址。(1)MOV AL,[BX](2)MOV CS:[BX+DI],AH28.0P1 DB 1,2 0P2 DW 3412H,5678H┇ MOV AX,OP1+1;字单元(OP1+1) AX MOV BL,OP2+1;字节单元(OP2+1) BL 上述二条传送语句有语法错误,请根据注释字段的说明,将其改正。29.下列语句在存储器中分别为变量分配多少字节? (1)AD2 DW 10 DUP(?),10 (2)AD3 DD 100 DUP(?)30.简述下面两条指令分别是什么语法错误? MOV [BX],[SI] MOV AX,DL四、程序分析题(本大题共6小题,每小题6分,共36分)31. MOV DL,AL   NOT DL   TEST DL,04H   JE NEXT        ┇ NEXT:…   若上述程序段执行时产生分支,说明AL中的数第几位一定为1?程序段执行后CF是多少?32.DA1  DB‘ABCDEFGHI’  DA2  DB  9 DUP(0)    ┇    LEA SI,DA1    LEA DI,DA2    MOV CX,9    CLD  LOP: LODSB    SUB AL,10H    STOSB    LOOP LOP    . . . 试问:①写出程序执行后DA2各字节中的数据。   ②保持程序功能情况下,程序中 可否改写为 33.已知:BX=4567H   NEG BX   INC BX   NEG BX   DEC BX 程序段执行后,BX=________,CF=________。34.   MOV BL,64H     MOV CL,03H     XOR AX,AX AGAIN:ADD AL,BL    ADC AH,0    DEC CL    JNZ AGAIN 问:(1)该程序段完成的功能是:   (2)AX=________。35.已知数据段中定义 DAT1 DB  12H,34H,56H,78H    MOV CX,0    MOV AX,WORD PTR DAT1    MOV CL,DAT1+3 当程序段执行完后AX=________,CX=________。36.DA1  DB 83H,72H,61H,94H,5AH    ┇     MOV CX,WORD PTR DA1     AND CX,0FH     MOV AL,DA1+3     SHL AL,CL  上述指令序列执行后,AL=_______,CL=_______。五、程序填空题(本大题共2小题,每小题6分,共12分)37.在NUMW单元存放有一个0-65535范围内的整数,将该数除以500,商和余数分别存入QU1和REM单元,请在空行处各填上一条指令完善该程序。   ┇ MOV AX,NUMW _____________ XOR DX,DX DIV BX MOV QUI,AX  _____________38.某程序欲用单个字符显示的2号功能调用去显示STRING中的字符串‘COMPUTER’(不显示字符‘$’!).试在空白处填上适当的一条指令。 STRING DB‘COMPUTER’,‘$’ ┇ MOV BX,0FFSET STRING LOP:MOV DL,[BX]    MOV AH,02H    INT 21H    ____________________    ____________________    JNE LOP六、编程序题(本大题共2小题,第39小题6分,第40小题12分,共18分)39.试编制一程序段,用串操作指令实现以DA_BY为首址的20H个字节单元中存放相同字符‘Y’(设DA_BY存储区已有ES指向)。40.试编制一源程序,统计DA1字单元中含0的个数,如统计的个数为奇数,则将进位位置1,否则进位位清0。    DATA  SEGMENT    DA1  DW  XXXX    DATA ENDS2006年10月汇编语言程序设计试题答案  来源: http://www.csai.cn 2006年10月汇编语言程序设计试题答案一、1、C;2、D;3、A;4、B;5、C;6、C;7、D;8、B;9、C;10、C;11、B;12、C;13、A;14、B;15、A16、C;17、D;18、C;19、D;20、B二、21、+65528;-3276022、20A8H;11488H23、状态;控制24、CF;OF25、IP;CS26、STOS;CMP三、27、(1)21357H;(2)43357H28、MOV AX,WORD PTR(OP1+1)    MOV BL,BYTE PTR(OP2+1)29、(1)22;(2)40030、MOV指令不能在两个存储器操作数之间进行;    操作数类型不匹配四、31、第2位;CF=032、123456789;不能更改33、BX=4565H;CF=134、AX=012CH,将AX内容乘3送BX中35、AX=3412H,CX=0078H36、AL=0A0H,CL=03H五、37、MOV BX,500    MOV REM,DX38、INC BX    CMP [BX],24H六、39、LEA DI,DA_BY        MOV CX,32        MOV AL,‘Y’        CLD        REP STOSB40、CODE SEGMENT          ASSUME CS:CODE,DS:DATA       START: MOV  AX,DATA              MOV  DS,AX              LEA  SI,DA1              MOV  CX,16              XOR BL,BL       AGAIN: MOV  AL,[SI]              HL AL,1              JC NEXT              INC BL        NEXT:INC SI              LOOP AGAIN              TEST BL,01H              JNE  L1              CLC              JMP DONE           L1: STC         DONE: MOV AH,4CH               INT 21H         CODE ENDS              END START  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值