微机原理与接口技术1-8习题解答王玉良 (1).doc_第1页
微机原理与接口技术1-8习题解答王玉良 (1).doc_第2页
微机原理与接口技术1-8习题解答王玉良 (1).doc_第3页
微机原理与接口技术1-8习题解答王玉良 (1).doc_第4页
微机原理与接口技术1-8习题解答王玉良 (1).doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章 习题参考解答 1 1填空和选择(1) 运算器和控制器合在一起称为中央处理器,中央处理器和存储器、IO接口、总线及电源合在一起被称为主机。(2)计算机的软件一般分为两大类:一类叫系统软件软件,一类叫应用软件软件。数据库管理系统属于系统软件软件,计算机辅助教学软件属于应用软件软件。(3)用来管理计算机系统的资源并调度用户的作业程序的软件称为操作系统;负责将高级语言的源程序翻译成目的程序的软件称为编译程序。(4)计算机系统中的存储器分为外存储器和内存储器。在CPU执行指令时,必须将指令存放在内存储器中。(5)计算机存储数据的最小单位是字节。1 KB容量的存储器能够存储1024个这样的基本单位。(6)在计算机系统中,多个系统部件之间信息传送的公共通道称为总线。就其传送的信息的性质而言,在公共通道上传送的信息包括控制和数据信息。(7)采用2的补码形式表示的8位二进制整数,其可表示的数的范围为( A )。A128127B21272127C21282127D127128(8)在定点数运算中产生溢出的原因是( C )。A运算过程中最高位产生了进位或借位 B参加运算的操作数超出了机器的表示范围 C运算的结果超出了结果单元的表示范围 D寄存器的位数太少,不得不舍弃最低有效位(9)下列逻辑部件中,不属于运算器的是( A )。A指令寄存器 C累加器2说明微型计算机的基本硬件构成和各部分功能。微型计算机硬件一般由微处理器、内存储器、外存储器、系统总线、接口电路、输入/输出设备等部件组成。主要组成部件的功能和特点分析如下:(1)微处理器:是微型计算机的核心部件,由运算单元ALU、控制单元、寄存器组以及总线接口部件等组成,其功能是负责统一协调、管理和控制系统中的各个部件有机地工作。(2)内存储器:用来存放计算机工作过程中需要的操作数据和程序。可分为随机存储器RAM和只读存储器ROM。RAM存放当前参与运行的各种程序和数据,特点是信息可读可写,存取方便,但信息断电后会丢失;ROM用于存放各种固定的程序和数据,特点是信息固定不变,关机后原存储的信息不会丢失。BALUD状态条件寄存器(3)系统总线:是CPU与其它部件之间传送数据、地址和控制信息的公共通道。可分成数据总线DB、地址总线AB、控制总线CB。(4)输入/输出接口电路:完成微型计算机与外部设备之间的信息交换。由寄存器组、专用存储器和控制电路等组成。(5)输入/输入设备:是微型计算机系统与外部进行通信联系的主要装置。常用的有键盘、鼠标、显示器、打印机和扫描仪等。3说明微型计算机系统的基本构成。微型计算机系统包括硬件系统和软件系统两大部分。 一、计算机硬件系统硬件是指组成计算机的各种物理设备,它包括计算机的主机和外部设备。具体由五大功能部件组成,即:运算器、控制器、存储器、输入设备和输出设备。这五大部分相互配合,协同工作。 二、计算机软件系统计算机软件系统包括系统软件和应用软件两大类。 1.系统软件系统软件是指控制和协调计算机及其外部设备,支持应用软件的开发和运行的软件。其主要的功能是进行调度、监控和维护系统等等。 2.应用软件应用软件是用户为解决各种实际问题而编制的计算机应用程序及其有关资料。 三、硬件和软件的关系1.硬件与软件是相辅相成的,硬件是计算机的物质基础,没有硬件就无所谓计算机。2.软件是计算机的灵魂,没有软件,计算机的存在就毫无价值。3.硬件系统的发展给软件系统提供了良好的开发环境,而软件系统发展又给硬件系统提出了新的要求。7把进制数2000变成二进制数、八进制数和六进制数。 20007D0H3720Q111 1101 0000B8把0.213变成二进制数、六进制数(精确到小数点后4位)。 0.2130.3687H0.1550Q0.001lB9用4位运算器完成如下计算,并解释所得结果: (1)无符号数 (3)符号数 (5)符号数(1)无符号数 64 (2)无符号数 34 (3)符号数 34 正确(4)符号数 341111 1001 0111V0,N1,负数,结果正确 V0,N1,负数,结果正确Vl,N0,负溢出,结1010 1111 0111C0,结果正确C1,结果不正确 V0,N0,正数,结果64 34(2)无符号数34(4)符号数 34 (6)符号数 5434(5)符号数 34(6)符号数 54果不正确10计算机内是如何表示进制数的?它有哪几种表示方法?用4位二进制数表示1位进制数,其中有6种非法代码(比如8421码中的1010B1111B)不用。压缩的BCD数,及非压缩的BCD数(包括ASCII数)。l 3用进制BCD码计算X3546,Y3546,Z4557,说明运算过程并解释结果。35 467B3545 46EF 579C 0681 6689 66 (进制修正)02C1,溢出C0,正确C1,溢出14与用2的补码X补Y补来计算XY补一样,试用“的补码”来计算1.13中的Y,并解释所得结果。因为46的“的补码”是54(10046),所以354635(54)的补,计算如下:35 5489 且C1(补码加时,无进位表示有“借位”)若把89看成“的补码”表示的符号数,则它表示:11(10089)。19若A01000011B,说明用什么运算可完成下述操作: (1)把A的第0、2、4、6位变反; (2)把A的第1、2、3位清零; (3)把A的第4、5、6位置1;(1)XORA,01010101B(2)AND A,11110001B(3)ORA,01110000B第2章 习题参考解答18086处理器内部一般包括哪些主要部分?8086处理器与其他处理器一样,其内部有算术逻辑部件、控制与定时部件、总线与总线接口部件、寄存器阵列等。按功能结构可分为两部分,即总线接口单元(BIU)与执行单元(EU)。BIU主要包括段寄存器、内部通信寄存器、指令指针、6字节指令队列、20位地址加法器和总线控制逻辑电路。EU主要包括通用寄存器阵列、算术逻辑单元、控制与定时部件等。2什么是总线? 般微机中有哪些总线?所谓总线是指计算机中传送信息的一组通信导线,它将各个部件连接成个整体。在微处理器内部各单元之间传送信息的总线称为片内总线;在微处理器多个外部部件之间传送信息的总线称为片外总线或外部总线。外部总线又分为地址总线、数据总线和控制总线。随着计算机技术的发展,总线的概念越来越重要。微机中常用的系统总线有PC总线、ISA总线、PCI总线等。3什么是堆栈?它有什么用途?堆栈指针的作用是什么?堆栈是一个按照后进先出的原则存取数据的部件,它是由栈区和栈指针组成的。堆栈的作用是:当主程序调用子程序、子程序调用子程序或中断时转入中断服务程序时,能把断点地址及有关的寄存器、标志位及时正确地保存下来,并能保证逐次正确地返回。堆栈除了有保存数据的栈区外,还有一个堆栈指针SP,它用来指示栈顶的位置。若是“向下生成”的堆栈,随着压入堆栈数据的增加,栈指针SP的值减少。但SP始终指向栈顶。4在8086 CPU中,FR寄存器有哪些标志位?分别说明各位的功能。8086 CPU中设置了一个16位的标志寄存器FR,其中用了9位,还有7位保留。9位中有3位作为控制标志,6位作为状态标志。IF:中断控制标志。当IF1时,允许可屏蔽中断请求;当IF0时,禁止可屏蔽中断请求。TF:单步运行标志。当TF1,单步运行;TF0,连续运行程序。DF:方向标志。当DF0,串操作时地址按增量修改;DF1,地址按减量修改。 SF:符号(负数)标志。当运算结果的最高位为1(负数)时,SF1;反之SF0。 ZF:零标志。当运算结果为0,则ZF1;否则ZF0。AF:辅助进位借位标志。当算术运算时低4位有进位借位,则AF1;否则AF0。AF主要用于BCD码运算中进行结果调整。PF:奇偶标志。当运算结果低8位中1的个数为偶数时PF1;否则PF0。CF:进位借位标志。当算术运算结果最高位有进位借位时,CF1;否则CF0。逻辑运算时CF0,循环移位指令也影响CF标志。OF:溢出标志。当符号数算术运算结果有溢出时OF1;否则OF0。5在8086 CPU中,有哪些通用寄存器和专用寄存器?试说明专用寄存器的作用。8086 CPU中有4个16位的通用寄存器,即AX、BX、CX、DX。每个16位寄存器又可分为2个,共8个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL。 4个段寄存器(即代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES)用来存放各段的起始地址。FR用来存放标志。IP用来存放程序地址的偏移量,它不能提供给程序员编程。SP是堆栈指针,专门用来指示堆栈位置。BP为基址指针,作为基址寄存器使用,它与变址寄存器SI、DI配合作为一个寻址方式。BP主要用来访问堆栈段中的数据。6若CS8000H,试说明现行代码段可寻址的存储空间范围。若CS8000H,现行代码段可寻址的存储空间范围为80000H8FFFFH。7设现行数据段位于存储器的B0000HBFFFFH,试说明DS段寄存器的内容。DSB000H8设双字12345678H的起始地址为A001H,试说明这个双字在存储器中是如何存放的。该双字在存储器中的存放如下:9说明8086的EU和BIU的主要功能。8086 CPU的BIU对外提供16位双向数据总线和20位地址总线。它负责完成所有的外部总线操作,即完成取指令、指令排队、读与写操作、地址转换和总线控制。 执行单元EU的主要功能是完成指令译码与执行指令工作。EU从BIU的指令队列输出端取得指令,对指令的代码进行译码,产生操作数地址并将其传送给BIU,向BIU申请完成存储器或IO的读写周期,对操作数进行指令规定的操作。在指令执行期间,EU测试标志位,根据指令执行的结果修改标志位。若指令队列是空的,EU等待下一次取得指令字节,且修改指令队列的输出指针。EU有一个16位的ALU,专门用来对操作数进行算术和逻辑运算。10说明8086CPU组成的系统中为什么必须使用地址锁存器?8086的数据总线和低16位地址总线是采用分时复用的。当执行存储器读写或I/O读写,在CPU总线周期的T1状态时,作地址总线输出(A15A0),在其他状态均作为双向数据总线使用。地址总线的高4位A19A16也是复用线,但他们是地址/状态复用线。为了使地址信息在整个总线周期中均保持有效地址,必须设置地址锁存器把T1状态上输出的20条地址信息进行锁存。118086 CPU的最大寻址范围是多少?如何实现对整个地址空间寻址?8086的存储器最大寻址范围为1M字节(地址为00000HFFFFFH);IO寻址的最大范围为64K(口地址为0000HFFFFH)。对1M存储器的寻址是通过段寄存器来实现的,每个存储器段为64K字节,1M字节的存储器可以分为若干个64KB段,利用段寄存器可寻址整个存储空间。对IO空间的寻址可使用直接寻址(对8位口地址);也可使用DX进行间接寻址(对16位口地址)。16在8086中,地址数据复用信号是如何区分的?在8086中,地址数据复用信号是在时间上区分的。在总线周期的T1状态,CPU在这些引脚上输出存储器或IO端口地址,在T2、T3、T4状态则输出数据收发信号。第3章 习题及参考解答1指出下列各指令中源操作数和目的操作数的寻址方式。 (1)MOV DI,100 (2)MOV CX100SI (3)MOV SI,AX (4)ADD AX,BX+DI (5)AND AX,BX (6)MOV DX,1000 (7)MOV BX,BP+DI+100 (8)PUSHF(9)SUB 1050,CX (10)AND DH,BP+4 解源操作数目的操作数 寄存器寻址 寄存器寻址 寄存器间接寻址(1)立即寻址 (2)变址寻址 (3)寄存器寻址(4)基址加变址寻址 寄存器寻址 (5)寄存器寻址 (6)直接寻址寄存器寻址 寄存器寻址(7)基址加变址寻址 寄存器寻址 (8)寄存器寻址 (9)寄存器寻址 (10)变址寻址2试述指令MOV AX,2000H和MOV AX,DS:2000H的区别? 解 区别有三条:(1) MOV AX,2000H对源操作数是立即寻址,而MOV AX2000H对源操作数是直接寻址;(2) 前者功能是把立即数2000H送入AX中,而后者是把内存2000H单元与2001H单元的内容取出送入AX 中;(3) 两者的机器代码不同,执行速度也不同,前者执行时间快,后者执行时间慢。寄存器间接寻址 直接寻址 寄存器寻址4若DS4000H,BX0800H,40800H05AOH,40802H2000H,求执行指令LDS SI,BX后,DS与SI中的内容。若上题中的DS换成ES,其他条件不变,求执行指令LES DI,BX后,ES与DI中的内容。 解SI=05AOH,DS=2000H DI=05AOH,ES=2000H5若AX98ABH,BX=A8BCH。求执行指令ADD AX,BX后,AX与BX中的内容,并指出SF,ZF,AF,PF,CF和OF的状态。解 AX=4167H,BX=A8BCH,SFZFAFPFCFOF001011B。6若CX=6700H,DX=78FFH,CF=1。求分别执行指令 (1)ADD CX,DX (2)ADC CX,DX (3)SUB CX,DX (5)AND CX,DX (6)OR CX,DX (7)XOR CX,DX后,CX与DX寄存器中的内容,并指出标志寄存器SF,ZF,AF,PF,CF及OF的状态。 解(1)CXDFFFH,DX78FFH,SFZFAFPFCFOF=100101B(2)CXE000H,DX78FFH,SFZFAFPFCFOF101101B (3)CXEE01H,DX78FFH,SFZFAFPFCFOF=101010B (4)CXEE00H,DX78FFH,SFZFAFPFCFOF101110B (5)CX6000H,DX78FFH,SFZFAFPFCFOF00100B (6)CX7FFFH,DX78FFH,SFZFAFPFCFOF00100B(7)CX1FFFH,DX78FFH,SFZFAFPFCFOF00100B7若AX=FFFEH,BX=FFFDH,求执行指令IMUL BX后,DX与AX中的内容。指出标志位OF与CF的状态。解 AX0006H,DX0000H,OFCF00B8若AL=75H,BL=48H, (1)求执行指令ADD AL,BL DAA之后AL=?标志AF=?CF=?并说明BCD码调整情况。 (2)若执行指令SUB AL,BL与DAS后,情况又如何? 解(1)AL23H,AFCF11B(2)AL=27H,AFCF10B9设X、Y、R、S、Z均为16位无符号数的变量。按已给定的表达式Z(X+Y)(RS)Z,有程序如下,试在空格处填入适当的指令(注:在加减过程中均无进位和借位)。 MOV AX,X MOV CX,R SUB CX,S MOV Z,AX MOV Z+1,DX HLT 解ADD AX,Y MUL ZDIV CX10若有一个四字节数,放在寄存器DX与AX中(DX中放高16位),要求这个4字节数整个左移一位如何实现?右移一位又如何实现? 解(1)DX与AX左移一位:SHL AX,01 RCL DX,01 (2)DX与AX右移一位:SHR DX,01 RCR AX,0111若把1K字节的数据块从偏移地址为1000H开始的单元传送到偏移地址为1400H开始的缓冲区。试用串传送操作指令和一般传送指令两种方法各编一程序实现。 解(1)利用串操作指令编程如下:MOV SI,1000H MOV DI,1400H MOV CX,400H CLD REP MOVSB MOV AM,4CH INT 21H(2)利用一般传送指令编程如下:MOV SI,1000H MOV DI,1400H MOV CX,400H NEXT:MOV AL,SIMOVDI,AL INC SI INC DILOOP NEXT MOV AH,4CH INT 21H12若在内存缓冲区中有一个长度为256个字节的数据块,起始地址偏移量为2000H。数据块中的数据有正有负,要求把其中的正负数分开分别送至同段的两个缓冲区,存放正数的缓冲区的起始地址偏移量为2100H,存放负数的缓冲区的起始地址偏移量为2200H。 试编一程序。 解MOV SI,2000H MOV CX,100H XOR DX,DX LOOP: MOV AL,SIADD AL,0 JNS PLUS INC DH NEXT: INC SIDEC CX JNZ LOOP JMP STOP PLUS: INC DLJMP NEXTSTOP: MOV 2100H,DLMOV 2200H,DH MOV AH,4CH INT 21H13若SS=1000H,SP=1000H,AX=1234H,BX=5678H,Flag=2103H,试说明执行指令 PUSH BX PUSH AX PUSHF POP CX之后,SP=?SS=?CX=?并画图指出栈中各单元的内容。 解 SS=1000H,SP=0FFCH,CX=2103H 栈中各单元内容如下: 地址 0FFAH 0FFBH 0FFCH 0FFDH 0FFEH 0FFFH 1000HRAM 03 21 34 12 78 56 XX14若DS=1100H,SI1000H,CS=1200H,IP=100H,12000H2000H,12002=1500H,求执行指令(1)CALL FARSI后CS与IP的内容; (2)CALL SI后CS与IP的内容。解(1)CS=1500II,IP=2000H (2)CS=1200H,IP=2000H15若执行指令INT 21H后,将转到何处执行程序,指出CS与IP的内容。解 将转到0:0086H和0:0084H处取出双字作为CS与IP的值,再执行程序。CS的值为内存单元0:0086H和0:0087H的内容;IP为内存单元0:0084H与0:0085H的内容。1 6编一程序使(1)AX寄存器低4位清零; (2)BX寄存器低4位置1; (3)CX寄存器低4位变反;(4)DX寄存器高3位不变,其余位清零。 解(1)AND AX,FFF0H (2)OR BX,000FH(4)AND DX,E000H18指出下列8086指令中哪些是错误的,错在何处? (1)MOV DL,BX (2)MOV DS,2000H (3)MOV DI,SI (4)MOV AX,BXBP (5)XCHG (6)PUSHDHCX,2400H(7)IN AH,DX (8)OUT 01F0H,AX 解(1)错。数据类型不匹配。(2)错。立即数不能直接送往段寄存器。 (3)错。两个内存单元不能直接传送数据。(4)错。BX和BP部可作为基址寄存器,缺少变址寄存器。没有基址加基址寻址方式。 (5)对。(6)错。堆栈操作必须是16位数据,DH是8位寄存器。(7)错。输入(IN)指令从端口读出的数据需送给累加器AL或AX,送给AH不行。 (8)错。端口地址为16位时,必须用DX间接寻址。19连续执行以下指令,填写执行指令的结果(MEM为存储器物理地址)。MOV CX0FFOOH MOV DS,AX MOV SI,CX ADD CX,AX MOVSI,CXADC SI,AL DEC BYTE SI MOV AX,06 ADC AX,08 AAAADD AL,59H DAAAND AL,0FH MOV BX,-8 NEG BXMOV DL,06 MUL DLOR AX,0FF00H CWDIDIV BXMOV AH,4CH;CX= H,CF= B ;SI= HSI+1= H ;SI= H,MEM= H ;SI= H,ZFCFPF= B;AX= H,CFAF= B ;AX= H,CFAF= B ;AL= H,CFAF= B ;AL= H;BX= H;AX= H ;AX= H;AX= H,DX= HINT 21H 解CX=2180H,CF=1B SI=80H,SI+1=21H SI=01H,MEM=32700H SI=00H,ZFCFPF=111B AX000FH,CFAF=00B AX=0105H,CFAF11B AL=5EH,CFAF=00B AL=64H BX0008H AX0018H AXFF18HAXFFE3H,DX=0000H 第4章 习题及参考解答1试编一程序,把地址偏移量为100H单元开始的256个单元分别写入00H,01H,02H,03H,FFH数据。 解 源程序如下 DATASEGMENT ORG 100H DB 256 DUP(?) EQU $BUF1BUF1 COUNTDATA STKENDSSEGMENT STACK DB 100 DUP(?) ENDSSTKCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUF1 ;戓 LEA SI,BUF1 MOV CX,COUNT XOR AL,ALNEXT:MOV SI,AL;或 MOV AL,00HINC AL INC SI LOOP NEXT MOV AH,4CH INT 21 HCODE2统计上题写入的数据块中0元素、正元素、负元素的个数,并分别把统计结果送入上述数据块之后的三个单元中。ENDS END START解 DATASEGMENT ORG 100H;共256个数据BUF1 DB 00H,01H02H,0FEH,0FFH COUNT EOU$BUF1DB 3 DUP(?)DATA ENDS STK SEGMENT STACK DB 100 DUP(?) STKENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV S1,OFFSET BUF1 MOC CX,COUNT XOR BX,BXXOR DH,DHNEXT2: MOV AL,SICMP AL,0 JZ ZER0 JS NEGATBL与BH分别存放正、负元素的个数 DH寄存器存放0元素个数若ZF=1,则为0,转至ZERO,DH+1 SF=0则为负数,BH+1;若INC BLJMP NEXT3;既不是0又不是负,则为正数,BL+1ZERO: INC DHJMP NEXT3;0的个数加1NEGAT:INC BH NEXT3: INC SI;负数个数加1 ;修改地址指针SI ;未完,继续循环;存入0元素个数统计结果LOOP NEXT2 MOV SI,DH INC SIMOV SI,BX MOV AH,4CH INT 21H;存入正、负数个数统计结果CODE ENDS4把地址偏移量为STRG1单元开始的128个单元的内容传送到地址偏移量为STRG2开始的单元中。 解DATA SEGMENTSTRGl DB XXH,XXH,XXH,XXH ;1 28个数据 COUNT EOU$STRGl STRG2 DB 128 DUP(?)END STARTDATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET STRG1 MOV DI,OFFSET STRG2 MOV CX,COUNT CLDREP MOVSB MOV AH,4CH INT 21 HCODE ENDS5寄存器SI做地址指针,自SI所指的内存单元开始连续存放三个无符号数(以字为单位),编一程序求它们的和,并将结果存放在这三个数之后的单元中。解 DATA BUFSEGMENTDW XXH,YYH,ZZHEND STARTSUM DW ?,? DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX MOV SI,OFFSET BUF MOV DI,OFFSET SUM MOV AX,SIADD AX,SI+2 MOV DI,AX MOV AX,0 ADDC AX,0 MOV DI+2,AX MOV AX,DI ADDC AX,SI+4 MOV DI,AXMOV AX,0 ADDC AX,DI+2 MOV DI+2,AX MOV AH,4CH INT 21H CODE ENDSEND START6读下面程序段,问:在什么情况下本段程序的执行结果是AH0? START:IN AL,5FHMOV AH,0 JZ BRCH MOV AH,0 JMP STOP BRCH: MOV AH,0FFH STOP: INT 20H解 当标志寄存器的ZF=0时,执行结果AH0。(JZ之前的两条指令对零标志没有影响)7下面语句在存储器中分别为变量分配多少字节? 0NEDW 10TW0 DW 4 DUP(?),5 THREE DB 2 DUP(?,8 DUP(0) COUNTEQU 10FOUR DD COUNT DUP(?) FIVE 解 ONEDW 10;为ONE分配2个字节 ;为TWO分配10个字节DB HOW ARE YOU?TWO DW 4 DUP(?),5THREE DB 2 DUP(?,8 DUP(0) ;为THREE分配18个字节 COUNTEQU 10;不给COUNT分配存储单元FOUR DD COUNT DUP(?) ;为FOUR分配40个字节 FIVE8数据定义语句如下所示: FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) FORTH DB DUP(?)自FIRST单元开始存放的是一个四字节的十六进制数(低位字节在前),要求: (1)编一段程序将这个数左移两位后存放到自SECOND开始的单元(注意保留移出部分);(2)编一段程序将这个数右移两位后存放到自THIRD开始的单元(注意保留移出部分); (3)编一段程序将这个数求补后存放到自FORTH开始的单元。 解DATA SEGMENT FIRSTDB 90H,5FH,6EH,69HDB HOW ARE YOU? ;为FIVE分配12个字节SECOND DB 5 DUP (?) THIRD DB 5 DUP (?) FORTH DBDUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX CALL SUBP1 SUBP1:CALL SUBP2 CALL SUBP3 MOV AH,4CH INT 21H PROCMOV SI,OFFSET FIRST MOV DI,OFFSET SECOND XOR BL,BL MOV CL,2 MOV AX,SIMOV DX,SI+2SHL AX,1RCL DX,1 RCL BL,1 DEC CL JNZ LOP1 MOV DI,AXLOP1MOV DI+2,DX MOV DI+4,BL RET SUBP1 SUBP2LOP2:SUBP2 SUBP3ENDP PROCMOV SI,OFFSET FIRST MOV DI,OFFSET THIRD XOR BL,BL MOV CL,2 MOV AX,SI MOV DX,SI+2 SHR DX,1RCR AX,1 RCR BL,1 DEC CL JNZ LOP2 MOV DI,BL MOV DI+1,AX MOV DI+3,DX RET ENDP PROCMOV SI,OFFSET FIRST MOV DI,OFFSET FORTH MOV AX,SI MOV DX,SI+2 NOT AXNOT DX ADD AX,1 ADC DX,0 MOV DI,AX MOV DI+2,DX RET SUBP3 CODE9指令语句AND AX,OPD1 AND OPD2中,OPD1和OPD2是两个已赋值的变量,问两个AND操作分别在什么时间进行?有什么区别?解 前面的AND是指令,在程序运行时执行,后面的AND是运算符,在汇编的时候由汇编程序计算,表达式计算结果出现在执行程序中。二者的区别在于,前者是指令,程序运行时执行,后者是运算符,汇编时计算。10如下指令或程序是否有错,若有错,请指出错在哪里?ENDP ENDS END START(1)KIEOU 1024 MOV K1,AX MOV DS,100 MOV 1000,2000(2)(3)IMP DB ?MOV IMP,AX(4)A1 DB ? A2 DB 10CMP A1,A2(5)将1000送入X1单元,用如下程序: X1 解(1)MOV K1,AX错。因为K1为立即数,它不能作为目的操作数。(2)这两条指令都是错的。第一条立即数不能直接送给段寄存器;第二条两个操作数不能同时为内存操作数。(3)MOV IMP,AX错。两操作数类型不匹配,IMP是一字节内存单元,而AX寄存DB ? MOV BX,X1 MOV BX,1000器中为16位数据。(4)CMP A1,A2错。两个操作数A1与A2不能同时为内存操作数。(5)MOV BX,1000错。两操作数类型不匹配,BX只定义了一字节单元,而1000是16位数据。118086汇编语言程序中段的类型有几种?各段如何定义?段定义语句中,定位类型、组合类型、类别各起什么作用?各有什么含义?解 8086汇编语言中,段的类型有三种,即代码段、堆栈段、数据段(附加数据段可归属于数据段)。各段可用段定义语句(SEGMENT与ENDS)和段名赋给段寄存器语句(ASSUME)来定义。段定义语句中,定位类型表示此段的起始边界要求,可允许4种段的起始边界,即PAGE、PARA、WORD或BYTE。它们分别表示段的起始值为以页、节、字、字节为边界,若此项省略,则默认值为PARA。组合类型用来告诉连接程序本段与其他段的关系,分别为NONE、PUBLIC、COMMON、AT表达式、STACK或MEMORY。每一种的含义请参看主教材。类别是连接程序(LINK)需要的。它可以是任何合法的名称,必须用单引号括起来,连接程序只使同类别的段发生关联。典型类别如CODE、STACK。12使用DOS功能调用0AH从键盘输入40个字符的字符串并将其送入一输入缓冲区。在按下Enter键后,显示这些字符。解NAME KBDINPUT CODE SEGMENTASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGIN BUFDB 41NUMB DB ? CHARS DB 41 DUP(?)MSG1 DB Type anything,followed by enter,0DH,0AH,$MSG2 DB 0DH,0AH,Contents of the KBD input buf:,0DH,0AH,$ BEGIN:MOV AX,CSMOV DS,AXMOV DX,OFFSET MSG1 MOV AH,9 INT 21HMOV DX,OFFSET BUF MOV AH,0AH INT 21 HMOV DX,OFFSET MSG2 MOV AH,9 INT 21H XOR BX,BX MOV BL,NUMB MOV CHARSBX,$ MOV DX,OFFSET CHARSMOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDSEND START说明本题把数据区放在代码段中,没有单独定义数据段。并且用ORG 100H语句把程序起始地址的偏移量放在100H开始的单元,用JMP BEGIN指令跳过数据区,这样可以把该程序经汇编、连接后的执行程序(EXE)用EXE2BIN软件生成COM文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论