汇编程序语言设计复习题整理

本文解析了一系列80X86微型计算机汇编语言的复习题目,涵盖指令执行、寄存器使用、内存寻址及数据操作等方面的知识点。
                          汇编复习题整理
1、80X86微型计算机的组织
1-10  写出下列十进制数的十六进制表示。
  18  34  87  255  4095  62472 
 解:18=12H;34=22H;87=57H;
255=0FFH;4095=0FFFH; 62472=0F408H;

1-12	处理器的主要功能是实现所有指令的执行并处理数据。

1-14 指出处理器是如何存储的内存中的一个值
(a) hex 1234;       (b) hex 01c3b5
解:(a)高位地址  12H
       低位地址   34H
        地址	 内存
   (b)高位地址    01H
		0c3H
      低位地址	0b5H
      地址       内存

1-15:  说出段,偏移量,地址边界的定义:
解:
段:一个程序段边界上开始的部分,大小为64K,包含代码,数据,堆栈。
偏移量:是段边界上开始到段中其他位置的字节距离。
段边界:可以被16整除的位置; 

1-18:  指出下列操作所需的寄存器: 
(a) 段寻址; (b) 要执行的指令的偏移地址; 
(c) 加法和减法操作; 
(d) 乘法操作; 
(d)乘法和除法操作;
(e)循环计数;
(f)标示结果为零。
解:(a)  CS,DS,SS;  
   (b)  IP;    
   (c)  AX,BX,CX,DX,DI,SI; 
   (d)  DX, AX; 
   (e)  CX; 
    f)  ZF

二、单选
1. 十六进制数88H可以被其他形式的数所表示, 下列哪种表示方法是错的?D
A. 无符号十进制136      C.压缩的BCD码 88
B. 带符号十进制–120      D. 带符号数据 –8
解:错误的是D选项,A选项 88=8*16^1+8=136,正确,B选项 带符号的十六进制
转换十进制方法:先将十六进制用二进制形式表示88H=10001000B,然后按位取反,末位加1 得01111000,再转换为十进制得-120,正确;C选项 正确。

2. 如果DH=10H, 执行NEG DH 指令, 正确的结果是(D. ).
A.  DH=10H   C=1           C. DH=10H    C=0
B.  DH=0F0H   C=0          D. DH=0F0H   C=1


3.哪个是指令指针寄存器? A
   A.IP   B.SP  C.BP   D.PSW(program status word)


4.  如果 AX=1000H,
      NEG  AX
      NEG  AX
   上面两条指令执行后, AX= (C ).
   a.1001H    b.1002H    c.1000H    d.0F000H
解:指令NEG是取反的意思,两次取反自然为本身。故选C

2.2	有两个16位的字1EE5H 和 2A3CH 存储在IBM PC 的000B0H 和000B03H 的内存单元中,请以图表的形式说明内存中的存储情况。
 解:
       内存地址       内容
        000B4H        2AH
        000B3H        3CH
        000B2H    
        000B1H        1EH
        000B0H        E5H 

2.3 如下图, 展示的是IBM PC的内存信息, 请说明30022H 字节单元和30024H字节单元的内容,和30021H 字单元和30022H 字单元的内容。
解:
存储器               	
30020H    12H       30022H字节单元的内容=0ABH
30021H    34H       30024H字节单元的内容=0EFH
30022H    ABH      30021H字单元的内容=0AB34H
30023H    CDH      30022H字单元的内容=0CDABH
30024H    EFH


2.4  3017:000A的段地址的物理地址和偏移量是什么? 3015:002A和3010:007A的段地址和偏移是什么?
解:段地址的物理地址是:3017AH;偏移量是:000AH
物理地址1:PA= 3017 × 10H + 000AH = 3017AH
物理地址2: PA= 3015 × 10H + 002AH = 3017AH
物理地址3: PA= 3010 × 10H + 007AH = 3017AH

2.5 运行程序之前, (CS)=0A7F0H,(IP)=2B40H, 程序的第一个字的物理地址是什么?
解:
 PA=(CS)×10H+(IP)= 0A7F00H + 2B40H = 0AAA40H
 
2.8 哪类型的寄存器可以用来显示内存地址?
解:CS, DS, ES, SS, IP, SP, BP, BX, DI, SI, 
EAX, EBX, ECX, EDX, EBP, EIP, ESP, EDI, 

5. 假定DS = 5788H, 偏移量是94H, 字节的PA(物理地址) (A).
a.57974H    b.57914H     
c. 5883H     d. 58ECH
解: PA=5788H*10H+94H=57974H

6.在段中寻址的时候,在8086CPU的寄存器中,哪些寄存器可以提供偏移地址(B)
   A. AX, BX, CX, DX       C. SP, IP, BP, DX 
   B. BX, BP, SI, DI         D. CS, DS, ES, SS

概念总结:  
CPU―-分析,控制并执行指令的部件,由算术逻辑部件ALU和寄存器组等组成。
存储器――存储程序,数据等信息的记忆装置,PC机有RAM和ROM两种。
堆栈――以后进先出方式工作的存储空间。
IP――指示 下一条要执行指令的地址。
SP――保存  当前栈顶地址的寄存器。
状态标志――记录指令操作结果的标志,共6位;OF,SF,ZF,AF,PF,CF.
控制标志――控制操作的标志,P机有三位,DF,IF,TF.
段寄存器――保存各逻辑段的起始地址的寄存器,PC机有4个:CS,DS,SS,ES.
物理地址――唯一代表存储空间中每个字节单元的地址。
汇编语言――用指令的助记符,符号地址,标号等符号书写程序的语言。
机器语言――能被计算机直接识别执行和的语言。
汇编程序――把汇编语言程序翻译成机器语言程序的系统程序。
连接程序――把若干个模块连接起来成为可执行文件的系统程序。
指令――告诉CPU要执行的操作(一般还要指出操作数的地址),在程序运行时执行。
伪指令――由汇编程序在汇编过程中执行的指令。 


3.   调试
3-7  用DEBUG的E命令来进入下列的机器语言程序:
机器码(在00H中):A0 00 D0 E0 F6 26 01 02 A3 02 02 90
数据(在200H中):2A 12 00 00
程序的实现的功能如下:
把DS:0200(2A)中的一个字节的内容移到AL寄存器。
把Al 中的一个位移动到左边(结果是54。)
把在DS:0201中的一字节内容与AL相乘。
把结果从AX中移到 DS:0202的开始的字;
键入程序后,  键入D 命令来查看代码和数据。
键入R 和连续的T 命令来一步步运行程序直到到达NOP。
这时, AX 应该包含了结果05E8H。
键入另一个D DS:0200,且注意到在DS:0202 中的结果是E805。
调试:
-E CS:100  A0 00 02 D0 E0 F6 26 01 02 A3 02 02 90               ;输入E指令
-D CS:100 LC
1370:0100  A0 00 D0 E0 F6 26 01 02-A3 02 02 90               .....&......
-E DS:200 2A 12 00 00
-D DS:200 L4
1370:0200  2A 12 00 00 
-R
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000         
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=0100   NV UP EI PL NZ NA PO NC
0B41:0100 A00002        MOV     AL,[0200]                          DS:0200=2A
-T
AX=002A  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=0103   NV UP EI PL NZ NA PO NC
0B41:0103 D0E0          SHL     AL,1
-T
AX=0054  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=0105   NV UP EI PL NZ NA PO NC
0B41:0105 F6260102      MUL     BYTE PTR [0201]                    DS:0201=12
-0B41:0105 F6260102      MUL     BYTE PTR [0201]                   DS:0201=12
-T
AX=05E8  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=0109   OV UP EI PL NZ NA PO CY
0B41:0109  A30202      MOV     [0202],AX                    DS:0202=0000
-T
AX=05E8  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=010C   OV UP EI PL NZ NA PO CY
0B41:010C 90            NOP
-D DS:202  L2 
0B41:0200        E8 05


3-8  问题3-7, 键入命令进入写在硬盘上的程序HEXMULT.COM.
调试:
-U 100 10C
0B41:0100 A00002        MOV     AL,[0200]
0B41:0103 D0E0          SHL     AL,1
0B41:0105 F6260102      MUL     BYTE PTR [0201]
0B41:0109 A30202        MOV     [0202],AX
0B41:010C 90            NOP
-N HEXMULT.COM
-R BX
BX 0000
:0
-R CX
CX 0000
:000B
-W
Writing 0000A bytes


3-9. 用 DEBUG的A命令来进入下列指令:
    MOV CX,3B
    ADD CX,1C
    SHL CX,01
    SUB CX,36
NOP
反汇编这些指令跟踪指令的运行直到NOP. 并且对每条指令,都查看CX寄存器的值。
调试:
-A
0B41:0100 MOV CX,3B
0B41:0103 ADD CX,1C
0B41:0106 SHL CX,1
0B41:0108 SUB CX,36
0B41:010B NOP
-U 100 10B
0B41:0100 B93B00        MOV     CX,003B
0B41:0103 83C11C        ADD     CX,+1C
0B41:0106 D1E1          SHL     CX,1
0B41:0108 83E936        SUB     CX,+36
0B41:010B 90            NOP
-T
AX=0000  BX=0000  CX=003B  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=0103   NV UP EI PL NZ NA PO NC
0B41:0103 83C11C        ADD     CX,+1C
-T
AX=0000  BX=0000  CX=0057  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=0106   NV UP EI PL NZ AC PO NC
0B41:0106 D1E1          SHL     CX,1
-T
AX=0000  BX=0000  CX=00AE  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=0108   NV UP EI PL NZ AC PO NC
0B41:0108 83E936        SUB     CX,+36
-T
AX=0000  BX=0000  CX=0078  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0B41  ES=0B41  SS=0B41  CS=0B41  IP=010B   NV UP EI PL NZ NA PE NC
0B41:010B 90            NOP


4. 语句
4-3. 两种类型的标示符是什么?
答案:是标号和名称。
 
4-4.下列哪些命名是正确的:
(a)  CX;  (b)25C4;  (c) @$_X;  (d)$25;  (e)AT&T.
如果不正确,解释原因
答案: 正确的命名是:
(c) @$_X  (d)$25
不正确: 	
(b)25C4 以数字开头
(e)AT&T &是非法字符
(a)CX 只再与CX 寄存器关联时是对的

4-9. (a) 解释过程的作用
(b) 怎么样定义一个过程的起始和结尾? 
(c) 什么时候应该定义FAR过程? 
(d)什么时候应该定义NEAR过程?
答案: 
(a) 过程提供了相关的代码部分。
(b) 过程名 PROC
   过程名 ENDP
(c) 在另一段中调用代码
(d)在同一段中调用代码


4-10. 哪些END语句与结束
 (a)一个过程; (b)一个段; (c) 一个程序 相关?
答案: (a)ENDP 	(b)	ENDS	(c)	END

4-11.区分结束汇编过程和结束程序执行的语句.
答案: END表示汇编结束
MOV AX,4C00H  和 INT 21H 结束CPU的运行。

4-12. 把名称STKSEG, DATSEG, 和CDSEG分别分配给堆栈,数据段, 和代码段, 编写所需的ASSUME 语句.
答案:
ASSUME  SS:STKSEG, DS:DATSEG, CS:CDSEG


4-17.通过AREA5定义下列数据项中的名称为ARE1的数值。
分别是:
(a)一个1字节项包含的二进制数相当于十进制数35。
(b)一个双字包好着连续的数12,14,22,28,33和 41。
(c)一个 2字节的项 包含着未定义的值。
(d)一个 1字节的项 包含的十六进制相当于十进制数58。
(e)一个4字节的项包含的十六进制相当于十进制数436。
答案: (a) AREA1	DB	0010 0011B
		(b) AREA2	DW	12,14,22,28,33,41
		(c) AREA3	DW	?
		(d) AREA4	DB	3AH
		(e) AREA5	DD	1B4H

单选:
1.汇编程序的语句中,可以省略 (B  )
    A. 名称    B. 操作符   C. 操作数   d.注释
2.正确结束伪指令的句子是( C):
A.汇编程序把伪指令翻译成机器代码。
B.伪指令在程序执行期间完成它的功能。
C.伪指令的功能是告诉汇编程序在汇编过程实现特殊的处理


3. 对于END 伪指令, 哪句话是对的?      C.
  a.  END 伪指令是一个可执行指令。
  b.  END 伪指令指明执行程序的终止之处。
  c.  END 伪指令指明整个源程序的终止。
  d. END 伪指令会在汇编过程生成机器码。

4.  执行下列指令后, 变量DAB 的内容是C
    DAW   DW   2A05H
    DAB   DB    0FAH
    …
    MOV  AL, BYTE  PTR  DAW
    SUB  DAB,  AL
 a. 0DAH     b. 0FAH     c.  0F5H    d.  0D0H


7.  BUF  DW  10H  DUP (3 DUP (2, 10H), 3, 5)
汇编了语句后, 变量BUF所分配的地址是  ( b).
 a.  80H     b. 100H      c. 124H      d.  192H

1.  ARY  DW  10 DUP(?)
    …
   MOV  AL, TYPE ARY
   MOV    BL, LENGTH  ARY
MOV    AL,  SIZE  ARY
   一系列MOV指令运行后,结果是 ?
答案:    (AL)=2,   (BL)=10D,     (al)= 20D

填空:
1.	可汇编语句中,有两种类型的语句(指令语句) 和 (伪指令语句)
2.	ARY  DW  10DUP(?)
      ……
  MOV  AL, TYPE  ARY   ;执行后(AL)= 2
  MOV  CL, SIZE   ARY   ; 执行后(CL)= 20

分析程序
DA_BY  DB    83H, 73H, 61H, 94H, 5AH
		      MOV  CX, WORD  PTR  DA_BY
		      AND  CX, 0FH
		      MOV  AL, DA_BY+3
		      SHL  AL, CL
上述指令执行后, 
AL=  A0H  ,CL=  03H


7.1 指令和伪指令的不同点?伪指令的功能是什么? 
答案: 指令和伪指令的不同是是否生成可执行的机器码。
伪指令只是用来告诉汇编程序采取特殊的处理,不生成机器码。
 
7.3   数值表达式跟地址表达式的不同点?
答案: 数值表达式是一个值可以在汇编过程中被汇编程序计算的表达式。
     地址表达式表征着操作数内存项的地址。

7.4   在汇编程序中,变量和标号的不同点? 
答案: 
       标号表示机器指令码所在的内存位置;
       变量表示着数值所在的内存位置;


7.5 计算下面表达式的值
①23H AND 45H OR 67		②1234H/16+10H
⑤LOW 1234H OR HIGH 5678H  ⑥23H SHL 4
答案:
         ① 43H       ②	133H
         ⑤ 76H	      ⑥	230H



7.7 如果有如下的一个程序段. 写出运行后AX寄存器的内容
				ORG	100H
100 VARW	DW		1234H,5678H
104 VARB 	DB		3,4
106 VARD 	DD		12345678H
10A BUFF 	DB		10 DUP(?)
114 MESS 	DB		‘HELLO’
119 BEGIN:      MOV  AX,OFFSET VARB+OFFSET MESS	;218H
		MOV  AX,TYPE BUFF+TYPE MESS+TYPE VARD ;6H
		MOV  AX,SIZE VARW+SIZE BUFF+SIZE MESS ;0DH
		MOV  AX,LENGTH VARW+LENGTH VARD ;2H
		MOV  AX,LENGTH BUFF+SIZE VARW	 ;CH
		MOV  AX,  TYPE  BEGIN	         ;-1
		MOV  AX,  OFFSET BEGIN	         ;119H

选择:
3.  对于END 伪指令, 那一句是对的?
a.  END 伪指令是一个可执行指令。
b.  END 伪指令指明执行程序的终止之处。
c.  END 伪指令指明整个源程序的终止。
d. END 伪指令会在汇编过程生成机器码
答案:C


3. DATA    SEGMENT
           ORG  20H
	   NUM1 =  8
           NUM2 =  NUM1 + 10H
 DA1       DB  ‘COMPUTER’
	   DB	 0AH, 0DH
 COUNT    EQU  $-DA1
 DA2      DW   ‘CO’, ‘MP’, ‘UT’, ‘ER’
 DATA     ENDS
 答案:   (1) DA1的偏移量是20H
          (2) COUNT的值是10D
          (3) DA2的内容+2 字节的位置是 P


4.  DA3	    EQU    WORD PTR	 DA4
    DA4	    DB 	   0ABH, 89H
 	    …
	   SHR    DA3, 1
	   MOV  DX,   DA3
	  SHL    DA4, 1
	  MOV  CX, DA3
程序执行之后:
            CX= 44AAH,  DX=44D5H


7.12如下程序段中有几个语句. 解释每一个符号的属性。

SYMB1  LABEL  BYTE
SYM2   EQU  THIS  BYTE
SYMB3  DW ?
SYMB4  EQU  BYTE  PTR  SYMB3

答案:  SYMB1     BYTE
      SYM2      BYTE
      SYMB3     WORD
      SYMB4     BYTE


4.7 请定义一个数据段DATASG, 在段中定义字符变量和数据变量,要求如下:
(1) FLD1B 是一个字符变量: ’personal computer’;
(2) FLD2B十进制数的字节变量 32; 
(3) FLD6B 10 个0的字节变量;
(4) FLD7B 是一个硬件名称的列表 (ASCII code) 和数量(十进制数)
(10)FLD3W 是(7)中硬件列表地址变量。
(11)FLD4W 是一个字变量包含5 个十进制数:5,6,7,8,9;
(13)FLD6W 是段中字节数据变量地址和字数据变量地址之差。

答案:	DATASG		SEGMENT
		FLD1B	DB	‘personal computer’
		FLD2B	DB	32
		FLD6B  DB	10 DUP(0)
		FLD7B	DB	‘PART1’,20,’PART2’,50,’PART3’,14
		FLD3W	DW	FLD7B
		FLD4W	DW	5,6,7,8,9
		FLD6W	DW	FLD3W-FLD1B


4.8  有一个数据段如下定义,PLENTH的值是多少? 意味着什么?
     PARTNO	DW		?
     PNAME	DB		16	DUP(?)
     COUNT	    DD		?
    PLENTH	EQU	$-PARTNO

答案: 值是22.相对PARTNO的偏移量

4.9  如下有几个语句,问: L的值?
	BUFF	DB	1,2,3,’123’
	EBUFF 	DB	0
	L       EQU	EBUFF-BUFF

答案:L的值是6 


4.10    有如下数据段。
(1) 用MOV 指令把LNAME的有效地址移到AX。
(2) 用一条指令来移动CODE_LIST前两个字节的内容到SI。
(3) 编写伪指令让CODE_LIST的与段得长度相等. 
	LNAME       DB  30 DUP (?)
	ADDRESS     DB  30 DUP(?)
	CITY         DB  15 DUP(?)
	CODE_LIST   DB  1,7,8,3,2
	答案:
	(1) MOV  AX, OFFSET  LNAME
	(2) MOV  SI , WORD PTR CODE_LIST
	(3) CODE_LENTH  EQU   $-CODE_LIST 


4.11 尝试写出整个数据段DATA_SEG, 它把5赋给一个字节, 且把整数–1,0,2,5 和4 放入10个字的数组DATA_LIST的前5个单元 。然后写出整个代码段, 功能是把DATA_LIST的前5 个数中的最大值和最小值放到 MAX 和 MIN。
答案:    DATA_SEG     SEGMENT
	DATA1        DB  5
        DATA_LIST    DW  -1,0,2,5,4, 5 DUP(?)
	MAX          DB  ?
        MIN          DB  ?
        DATA_SEG    ENDS
        CODE_SEG    SEGMENT
                    ASSUME   DS:DATA_SEG,CS:CODE_SEG
        BEGIN:      MOV  MAX, 5
                    MOV  MIN, -1
        CODE_SEG    ENDS
                    END  BEGIN


6-1.寻址
3.1 给出(BX)=637DH,(SI)=2A9BH,偏移量D=7237H,尝试指出下列每一种寻址模式的有效地址。
(1) 立即寻址;
(2) 直接寻址
(3) 用BX的寄存器寻址;
(4) 用BX的寄存器间接寻址;
(5) 用BX的寄存器相对寻址;
(6) 基址变址寻
(7)相对基址变址寻
答案:(1)无      
(2)EA=7237H     
(3)无  
(4)EA=637DH
(5)EA=D+[BX]=7237H+637DH=0D5B4H
(6)EA=[BX]+[SI]=637DH+2A9BH=8E18H
(7)EA=D+[BX]+[SI]=7237H+637DH+2A9BH=1004FH


3.2  根据下列要求, 写出相关的汇编语言指令。
(1) 把BX 的内容和DX 的内容相加,结果放入DX 中。
(2) 把AL的内容加上内存地址的内容,并把结果放到AL中。内存地址由BX和SI进行基址变址寻址所得。
(3)把CX的内容加上内存地址的一个字,并把结果放到内存地址中。内存地址由BX和偏移量0B2H进行寄存器相对寻址所得。
(4) 把内存地址的内容与数2A59H相加,并把结果放入内存地址。内存地址由偏移量0524H进行直接寻址所得。
(5) 把数值0B5H 与AL 寄存器的内容相加, 结果放入AL寄存器。
答案:  (1)ADD  DX, BX   
(2)ADD  AL, BX[SI]
(3)ADD  WORD PTR 0B2H [BX], CX
(4)ADD  WORD PTR [0524H], 2A59H
(5)ADD  AL, 0B5H


3.3 写出指令,把首址是BLOCK的字数组中的第六个字移入DX寄存器。使用如下的寻址方式。
(1) 寄存器间接寻址
(2) 寄存器相对寻址
(3) 基址变址寻址

答案:             
(1) LEA  BX, BLOCK+10
   MOV  DX, WORD PTR [BX]
(2) LEA  SI, BLOCK
    MOV  DX, WORD PTR 0AH[SI]   
(3)LEA  BX, BLOCK
   MOV  SI, 0AH
   MOV  DX, WORD PTR [BX][SI] 


3.4给出(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H, (21200)=2AH,(21201)=4CH,(21202)=B7H, (21203)=65H,
尝试解释:执行指令后,AX寄存器的内容。
(1)  MOV  AX, 1200H
(3) MOV  AX, [1200H]
(5) MOV  AX, 1100[BX]
(7) MOV  AX, 1100[BX][SI]

答案: 
(1) (AX)=1200H
(3)(AX)=4C2AH
(5)(AX)=4C2AH
(7)(AX)=65B7H


3.8 给出(DS)=2000H,(ES)=2100H,(SS)=00A0H,(BX)=0100H,(BP)=0010H,数据段中VAL 的偏移地址是0050H,指出源操作数段得寻址方式和物理地址。
(2) MOV  AX, BX
(4) MOV  AX, VAL
(6) MOV  AX, ES:[BX]
(8) MOV  AX, [SI]
(10)MOV  AX, VAL[BX]
(12)MOV  AX, VAL[BX][SI]

答案: 
(2)寄存器寻址
(4)直接寻址,物理地址=20050H
(6)寄存器间接寻址,物理地址=21100H
(8)寄存器间接寻址,物理地址=200A0H
(10)寄存器相对寻址,物理地址=20150H
(12)相对基址变址寻址,物理地址=201F0H



6-2
单选:
1.当执行POP [BX] 和寻找目标操作数时,段地址跟偏移地址是在( B )中。
  a. 无段地址也无偏移地址
  b. DS 和BX中
  c. ES 和 BX中
  d. SS 和 SP中

2.下列指令中, 哪个是错的? 
  a.  MOV  SS:[BX+DI],1000H
  b.  MOV  DX, 1000H
  c.  MOV  WORD PTR [BX],1000H
  d.  MOV  DS, 2000H

答案:
d. 错误:  立即数到段寄存器

编写指令:
1. D1   DB  20H  DUP(?)
  D2   DW  D1
给出三种方式,使用一条指令来把D1的偏移量载入到SI中。
答案:
    1. LEA    SI,   D1
    2. MOV   SI,  OFFSET  D1
    3. MOV   SI, D2  


简答:

1. 指出下列的错误:
1)MOV  AH, BX
2)MOV  [BX], [SI]
3)MOV  AX,[SI] [DI]
4)MOV  MYDAT [BX][SI], ES:AX
5)MOV  BYTE  PTR[BX], 1000
6)MOV  BX, OFFSET MYDAT[SI]
7)MOV  CS, AX
解:
1)MOV  AH, BX                ;操作数大小不同
2)MOV  [BX], [SI]              ;出错:内存到内存
3)MOV  AX,[SI] [DI]           ;出错: 把[SI][DI]放到一起
4)MOV  MYDAT [BX][SI], ES:AX    ; 与2同,
5)MOV  BYTE  PTR[BX], 1000      ; 与1同,
6)MOV  BX, OFFSET MYDAT[SI]     ;删除[SI]
7)MOV  CS, AX                ;出错: CS 是第一操作数

填空:
    .MODE  SMALL
    .DATA
    DFATA1   DW	2000H
    DATA2    DW	3000H
    .CODE
    .STARTUP
     LEA     SI,DATA1
    MOV	DI,  OFFSET	DATA2
    MOV	BX,	[SI]
    MOV	CX,	[DI]
    MOV	[SI],	CX
    MOV	[DI],	BX
   .EXIT
    END
  程序执行之后, (DATA1) = 3000H
               (DATA2) = 2000H


3.10 TABLE 是一个在数据段中0032上的符号, 它的内容是1234H, 下面指令有什么不同?执行指令后AX寄存器的内容是什么?

				MOV  AX, TABLE
				LEA  AX,TABLE


答案:    (AX)=1234H
         (AX)=0032H


3.11  执行下列指令后AX 寄存器的内容是什么?
TABLE 	DW		10,20,30,40,50
ENTRY  DW 	3        
		 …
         ……
 		MOV   BX,OFFSET TABLE
        ADD	BX ENTRY
		MOV	AX [BX]
        (BX)=0000H
	(BX)=0003H
答案:   (AX)=1E00H


7.8 下列指令中,符号ABCD 是一个变量。说出两条指令的不同。
	MOV  AX,OFFSET ABCD
	LEA   AX,ABCD
答:两条指令都是取ABCD的偏移地址
但MOV指令能以更少的时间完成同样的功能。

7.10 如下的一个程序段。请改正错误的指令。
VARW	DW	 1234, 5678H
VARB	DB	 3,4
VARD	DD	 12345678
……
	MOV	AX,VARB
	MOV	VARD,BX
	MOV	VARD+2,ES
	MOV	CL,VARW+3
	LES		DI,VAFW
改正如下:
MOV  AX , WORD PTR VARB
MOV  WORD PTR VARD ,  BX
MOV  WORD PTR VARD+2 , ES
MOV  CL , BYTE PTR WARW +3


8-1 、编程逻辑和控制要求
8-2  
(a) 一个近 JMP, LOOP, 和条件跳转指令可以跳转的字节的最大值是什么?  (b) 机器代码的操作数的什么特点导致了这种限制??
答案:
(a)JMP:两操作数字节.
LOOP:一个操作数字节
条件跳转:一个操作数字节


8-3一条JMP指令从偏移位置05C8H开始。指出JMP 的操作数跳转的偏移地址, 基于下列目标代码: (a) 14H;(b)  7DH;(c)  A3H
答案:
	(a)05C8H+0014H+2H=05DEH.
	(b)05C8H+007DH+2H=0647H.
	(c)05C8H+FFA3H+2H=056DH.

8-5 假定AX 和BX 包含了无符号数据且 CX 和 DX包含了带符号数据。指出下列所需的CMP (必要时)和条件跳转指令 :
(a) AX 等于或小于BX ?  
(b) CX等于或小于DX? 
(c) CX 的值大于 DX? 
(d) AX 的值大于BX?
(e) DX 包含零吗?  
(f)有溢出吗?
答案:
(a)CMP AX, BX             
    JBE   Address
(b)CMP  CX, DX      
     JLE   Address
(c)CMP  CX, DX      
     JG    Address
(d)CMP AX, BX      
     JA   Address
(e)CMP  DX, 0      
     JE    Address

(f)JO    Address


8-10 在一个.EXE 程序中, F10 调用G10, G10 调用H10, H10 调用J10.因为这些调用,堆栈中现在包含多少个地址?
答案:3 个地址


8-13 假定BX 包含二进制10111001 10111001 和CL 包含3. 指出下列指令运行后BX的十六进制值 : 
a) SHL BL 1;
b) SHL BX,CL; 
c) SHR BX,CL; 
d) SHR BX,1; 
e) SAL BH,1; 
f) ROR BX,CL; 
g) ROR BL,CL
答案:
a)B972H(BL逻辑左移一位)
b)0CDC8H(BX逻辑左移3位)
c)1737H(BX逻辑右移3位)
d)5CDCH(BX逻辑右移1位)
e)72B9H(BX算术左移1位)
f)3737H(BX循环右移3位)
g)B937H(BL循环右移3位)


8-14 用移位, 移动, 和加法指令来以40H初始化CX 并且乘于10.
答案:
    MOV CX, 40H
    MOV AX, CX
    MOV BX, CX
    MOV  CL, 3
    SHL  AX, CL
    SHL  BX, 1
    ADD AX, BX


8-15    命名为“旋转位”的章节末尾有一个例子,把DX:AX乘于2。修改这个程序a) 乘于4 b) 除于4 c) 把DX:AX:BX中的48位乘于2。
答案:
a)  SHL AX, 1
     RCL DX, 1
     SHL AX, 1
     RCL DX, 1
b)  SAR DX, 1
     RCR AX, 1
    SAR DX, 1
    RCR AX, 1
c)  SHL BX, 1
    RCL AX, 1
   RCL DX, 1


2.假定VAR1 和 VAR2 是字变量, LAB 是标号, 指出下列的错误:
ADD VAR1,VAR2            
SUB  AL, VAR1
JMP   LAB[SI]
JNZ   VAR1
JMP   NEAR  LAB
错误: 
1.ADD 内存, 内存    
2. 两个操作数大小不同
3.删除[SI] 或者 删除 LAB
4. 条件跳转范围<= 字节, 不是字
5.  应该是JMP NEAR PTR LAB

3、A DW 1234H
B DW 5678H
……
PUSH A
PUSH B
POP A
POP B
回答:
① 执行之后(A)=5678H ,( B)= 1234H
② 执行程序之前SP=200H,
执行之后SP= 200H


8-2
分析指令:
1、MOV AX,6540H
MOV DX,3210H
MOV CL,04
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,BL

执行指令之后,
(AX)=5400H,(BL)=06H,
(DX)=2106H


2、MOV AL,200
SAR AL,1
MOV BL,AL
MOV CL,2
SAR AL,CL
ADD AL,BL
 执行指令之后
(BL)=0E4H
(AL)=0DDH


3 .BLK1 DB 46,84,34,-5,20,122,73
MOV CX,7
LEA S1,BLK1
NEXT: MOV AL,[SI]
INC SI
TEST AL,81H
LOOPZ NEXT
MOV BL,[SI]
 
执行指令之后:
(AL)=0FBH(BL)=20 / 14H

6、
AND  AL,AL
JZ    BRCH1
RCR  AL,1
JZ    BRCH2
RCL  AL,1
INC  AL
JZ   BRCH3
执行指令之后, 回答:
(1)当(AL)=0时,程序跳到BRCH1
(2)当(AL)=1时,程序跳到BRCH2
(3)当(AL)=0FFH时,程序跳到BRCH3

12.串
单选:
1.当在串指令之前使用REPE 立即前缀时,当 (C),串指令将会停止。
A.   CX=0 and ZF=0		B. CX=0 and ZF=1
C.   CX=0  or  ZF=0		D. CX=0  or  ZF=1
2.下列哪条指令有合理和充分的意义?   D
A.   REP LODSB			B.  REP SCASB
C.   REP CMPSB      		D.  REP MOVSB

13.算术
13.1
对于无符号和带符号的数据。(a)字节的最大值是什么(b)字的最大值是什么?
答案:
(a):对于带符号数据:+127and128;
   对于无符号数据:0 and 255
(b):对于带符号数据:-32768 and 32767
   对于无符号数据:0 and 65535:


13-2 区分算术操作的进位和溢出。
答案:
C 位代表无符号数据的溢出;
C=1,有进位/借位;  其他情况C=0。
O 代表带符号数据的溢出。
加法: 当两个操作数的符号相同,但是结果的符号与操作数不同时,O 位被置位 (O=1)。其他情况O = 0。
减法: 如果两个操作数符号不同, 结果和减数的符号相同,那么O =1;其他情况 O = 0。

13-3     对于下列的二进制加法, 指出二进制的和作为带符号和无符号的十进制的和, 指出溢出标志和进位标志的值:
a)   0011 0011 + 0001 1000
b)   0111 0110 + 0001 1001
c)   1101 0110 + 0101 1001

答案:
          a          b              C
Sum   0100 1011    1000 1111     0010 1111
CF       0		 0         1
OF       0	         1	   0


13.5编写代码:
a): 字VALUE1 和字VALUE2相加;
MOV AX, VALUE2
ADD AX, VALUE1

(b): 以VALUE1开始的双字 和双字VALUE2相加;
MOV EAX, VALUE1
ADD EAX, VALUE2

13.7 编写代码(MUL)
(a)  字VALUE1 和VALUE2相乘;
    MOV AX, VALUE1
    MUL VALUE2
(b) 以VALLE1开始的双字 与字VALUE2相乘; 
   MOV  AX, VALUE1
   MUL  VALUE2
   MOV  RESULT, AX
   MOV  RESULT+2, DX
   MOV  AX, VALUE1+2
   MUL  VALUE2
   ADD  RESULT+2, AX
   ADC   RESULT+4, DX
   ADC   RESULT+6, 0

13.8编写代码(DIV) :
(a): 字VALUE1 除于36;
MOV AX, VALUE1
MOV BL, 36
DIV BL
(b): 以双字开始的VALUE1 除于字VALUE2;
MOV   AX, VALUE1
MOV   DX, VALUE1+2
DIV     VALUE2

13.9
除了除以零之后,除以什么数会导致溢出错误?
答案: 除数必须比被除数小。例如除于1,如除以1生成一个商数,是与被除数相同,也可能导致中断和溢出错误。

3.40   分析下列代码段:
ADD  AX, BX
JNO   L1
JNC   L2
SUB   AX, BX
JNC   L3
JNO   L4
JMP   SHORT L5
AX的内容和CX的内容如下 :
AX       BX
B568      54B7
程序执行后,会跳转到哪里?
答案:
L1
L3


3.47           指令填空:
                (1) LOOP  L20    (2)LOOPE  L20      (3)LOOPNE  L20
尝试指出在3个不同情况下,程序执行之后AX,BX,CX,DX 寄存器的内容 ? 
TITLE          EXLOOP.COM
CODESG      SEGMENT
            ASSUME CS: CODESG, DS: CODESG,SS:CODESG
            OGR     100H
BEGIN:      MOV   AX, 01
            MOV   BX, 02
            MOV   DX, 03
            MOV   CX, 04
L20:        INC   AX
            ADD   BX, AX
            SHR   DX, 1
           (   )
            RET
CODESG     ENDS
            END     BEGIN
 答案: (1) LOOP  L20 :AX=05H ; BX=10H ; CX=00H ; DX= 00H     
      (2) LOOPNE  L20: AX=03H; BX=7H; CX=2H ; DX=00H
      (3)LOOPE  L20:没有进行循环
       AX=02H; BX=4H; CX=3H; DX=1H

4-1  写出ADD指令,完成如下操作:
(a)  把BX 加到AX
ADD AX, BX
(b) 把 12H加到AL
ADD AL, 12H
(c ) 把 EDI 加到 EDP
ADD EDP, EDI
(d) 把22H 加到 CX
ADD CX. 22H
(e) 把SI的地址数据加到AL
ADD AL, [SI]
(f)把CX 加到FROG地址的数据上
ADD FROG, CX

4.2 指出指令ADD ECX,AX的错误?
答案:  ECX 和AX的大小不一致。

4.3 可以用ADD 指令把CX 加到DS吗?
答案:  不可以,因为DS是段寄存器。

4.4   给出AX=1001H,DX=20FFH,执行ADD AX,DX后,列出标志寄存器的总和和每一位的内容。

答案:
AX=3100H;
C=0;最高位没有进位
A=1;第三和第四位没有进位
S=0;结果为正
Z=0;结果非零
O=0;结果没有溢出

4.6 设计一个简短的程序,把AX,SX,CX,DX 和SP 累加在一起,把结果存进DI中。

LEIJIA  PROC  NEAR
        ADD  AX, BX
        ADD  AX, CX
        ADD  AX, DX
        ADD  AX, SP
        MOV  DI, AX
        RET
LEIJIA ENDP

4.9	写出把sp的内容加1的指令。
指令:INC SP


4.10 写出SUB 指令,完成如下操作。

(a) 从AX中减去BX
指令:SUB AX, BX
(b) 从 DH中减去 0EEH
指令:SUB DH, 0EEH

4.11 解释SBB [DI-4],DX的结果
答案: 从由DI-4寻址的内存单元中,减去CX,同时也减去借位。

4.12 解释SUB 和CMP指令的不同
答案: 指令SUB的功能是 从源操作数减去目标操作数,然后把结果存储到目标操作数,
     而CMP指令并不会改变两个操作数的内容,只会改变标志位 。

4.13 当8-位 操作数加上另外一个数,结果存在哪里?
答案: 在AX 寄存器中。

4.14 MUL EDI 的结果存在哪里?
答案 :在EDX-EAX中。

4.15 当8-bit 操作数被除时,结果存在哪里?
答案: AX.

4.16    写一个简短的程序, 把BL中的数据除以CL中的数据, 然后把结果加上2,最后的结果存在 DX中, 是16-位数。

答案:
MOV AL, BL
MOV AH, 0
DIV CL
MOV AH, 0
ADD AX, AX
MOV DX, AX


KDWM1000 是一款Local Positioning System (LPS)的开发模块,这款模块主要结合了自己之前做的SmartIMU与现成的 DWM1000 模块,目前版本 v1.4,大致的功能都验证过没问题。 该KDWM1000模组集成了 MPU9250(加速度计、陀螺仪、磁力计)、LPS25HB(气压计) 10DOF 的传感器,并采用 ARM CortexM4F STM32F411CE 来控制,除了传感器与 DWM1000 模块外,还有可控制的三个 RGB LED、一个电源开关、按键与一个 MicroUSB 接口,此外将其他没有使用到的脚位都拉到 2.54mm 的排针上面,可以直接插在面包版上做开发,预计之后要透过 IMU 与 UWB 来实现空间中的定位,并尝试将其结合至飞行器上,实现成另一款飞控板。 KDWM1000模组PCB结构图: KDWM1000模组PCB 3D截图: KDWM1000模组硬件: 控制器 : STM32F411C 48Pin 100MHz DSP FPU 感測器 : MPU9250 + LPS25HB UWB : DecaWave DWM1000 PCB 尺寸 : 25.4 x 45.72 mm Ultra-wideband(UWB) 是一种无载波通信技术,采用 nanosecond(ns) 至 picosecond(ps) 级的极短脉冲信号来传递数据,耗电量低,因为脉冲极短(光速大约30cm/ns),所以对于绕射、反射干扰影响较小,电波讯号穿透性较佳,理论上可以实现较精确的定位。 KDWM1000 UWB 部分使用的是 Decawave 开发的 DWM1000 模块,DWM1000 模块基本简介: 符合 IEEE802.15.4-2011 UWB 规范 在实时的定位系统中,可以达到室内 10cm 的精度 资料传输速度高达 6.8 Mb/s 通讯距离达 300m 支持高密度 tag,20m 半径内可达 11,000 对多路径与衰减具有高抗干扰能力,使其在高衰减环境亦可进行可靠的通讯 功耗低,可以使用电池工作在长时间下 体积小,容易结合至其他 RTLS 与 WSN 系统 集成天线的一款模块 更详细的说明与功能可以参考官方的相关资料:https://www.decawave.com/products/dwm1000-module DWM1000模块实物截图: ,实体图片&darr;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值