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

下载本文档

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

文档简介

第1章习题参考解答1.1.填空和选择(1)运算器和控制器合在一起称为中央处理器,中央处理器和存储器、I/O接口、总线及电源合在一起被称为主机。(2)计算机的软件一般分为两大类:一类叫系统软件软件,一类叫应用软件软件。数据库管理系统属于系统软件软件,计算机辅助教学软件属于应用软件软件。(3)用来管理计算机系统的资源并调度用户的作业程序的软件称为操作系统;负责将高级语言的源程序翻译成目的程序的软件称为编译程序。(4)计算机系统中的存储器分为外存储器和内存储器。在CPU执行指令时,必须将指令存放在内存储器中。(5)计算机存储数据的最小单位是字节。1KB容量的存储器能够存储1024个这样的基本单位。(6)在计算机系统中,多个系统部件之间信息传送的公共通道称为总线。就其传送的信息的性质而言,在公共通道上传送的信息包括控制和数据信息。(7)采用2的补码形式表示的8位二进制整数,其可表示的数的范围为(A)。A.-128~+127 B.-2-127~+2-127C.-2-128~2+127 D.-127~+128(8)在定点数运算中产生溢出的原因是(C)。A.运算过程中最高位产生了进位或借位B.参加运算的操作数超出了机器的表示范围C.运算的结果超出了结果单元的表示范围D.寄存器的位数太少,不得不舍弃最低有效位(9)下列逻辑部件中,不属于运算器的是(A)。A.指令寄存器 B.ALUC.累加器 D.状态条件寄存器2.说明微型计算机的基本硬件构成和各部分功能。微型计算机硬件一般由微处理器、内存储器、外存储器、系统总线、接口电路、输入/输出设备等部件组成。主要组成部件的功能和特点分析如下:(1)微处理器:是微型计算机的核心部件,由运算单元ALU、控制单元、寄存器组以及总线接口部件等组成,其功能是负责统一协调、管理和控制系统中的各个部件有机地工作。(2)内存储器:用来存放计算机工作过程中需要的操作数据和程序。可分为随机存储器RAM和只读存储器ROM。RAM存放当前参与运行的各种程序和数据,特点是信息可读可写,存取方便,但信息断电后会丢失;ROM用于存放各种固定的程序和数据,特点是信息固定不变,关机后原存储的信息不会丢失。(3)系统总线:是CPU与其它部件之间传送数据、地址和控制信息的公共通道。可分成数据总线DB、地址总线AB、控制总线CB。(4)输入/输出接口电路:完成微型计算机与外部设备之间的信息交换。由寄存器组、专用存储器和控制电路等组成。(5)输入/输入设备:是微型计算机系统与外部进行通信联系的主要装置。常用的有键盘、鼠标、显示器、打印机和扫描仪等。3.说明微型计算机系统的基本构成。微型计算机系统包括硬件系统和软件系统两大部分。一、计算机硬件系统硬件是指组成计算机的各种物理设备,它包括计算机的主机和外部设备。具体由五大功能部件组成,即:运算器、控制器、存储器、输入设备和输出设备。这五大部分相互配合,协同工作。二、计算机软件系统计算机软件系统包括系统软件和应用软件两大类。1.系统软件系统软件是指控制和协调计算机及其外部设备,支持应用软件的开发和运行的软件。其主要的功能是进行调度、监控和维护系统等等。2.应用软件应用软件是用户为解决各种实际问题而编制的计算机应用程序及其有关资料。三、硬件和软件的关系1.硬件与软件是相辅相成的,硬件是计算机的物质基础,没有硬件就无所谓计算机。2.软件是计算机的灵魂,没有软件,计算机的存在就毫无价值。3.硬件系统的发展给软件系统提供了良好的开发环境,而软件系统发展又给硬件系统提出了新的要求。7.把+进制数2000变成二进制数、八进制数和+六进制数。2000=7D0H=3720Q=11111010000B8.把0.213变成二进制数、+六进制数(精确到小数点后4位)。0.213=0.3687H=0.1550Q=0.001lB9.用4位运算器完成如下计算,并解释所得结果:(1)无符号数 6+4 (2)无符号数 3-4(3)符号数 3+4 (4)符号数 3-4(5)符号数 -3-4 (6)符号数 -5-4(1)无符号数6+4 1010 C=0,结果正确(2)无符号数3-4 1111 C=1,结果不正确(3)符号数 3+4 0111 V=0,N=0,正数,结果正确(4)符号数 3-4 1111 V=0,N=1,负数,结果正确(5)符号数 -3-4 1001 V=0,N=1,负数,结果正确(6)符号数 -5-4 0111 V=l,N=0,负溢出,结果不正确10.计算机内是如何表示+进制数的?它有哪几种表示方法?用4位二进制数表示1位+进制数,其中有6种非法代码(比如8421码中的1010B~1111B)不用。压缩的BCD数,及非压缩的BCD数(包括ASCII数)。l3.用+进制BCD码计算X=35+46,Y=35-46,Z=45+57,说明运算过程并解释结果。35 35 45+46 - 46 +577B EF 9C+06 -66 +66(+进制修正)81 89 02C=0,正确 C=1,溢出 C=1,溢出14.与用2的补码[X]补+[-Y]补来计算[X-Y]补一样,试用“+的补码”来计算1.13中的Y,并解释所得结果。因为-46的“+的补码”是54(=100-46),所以35-46=35+(54)的补,计算如下: 35 +54 89且C=1(补码加时,无进位表示有“借位”)若把89看成“+的补码”表示的符号数,则它表示:-11(=-(100-89))。19.若A=01000011B,说明用什么运算可完成下述操作: (1)把A的第0、2、4、6位变反; (2)把A的第1、2、3位清零; (3)把A的第4、5、6位置1;(1)XOR A,01010101B(2)AND A,11110001B(3)OR A,01110000B第2章习题参考解答1.8086处理器内部一般包括哪些主要部分?8086处理器与其他处理器一样,其内部有算术逻辑部件、控制与定时部件、总线与总线接口部件、寄存器阵列等。按功能结构可分为两部分,即总线接口单元(BIU)与执行单元(EU)。BIU主要包括段寄存器、内部通信寄存器、指令指针、6字节指令队列、20位地址加法器和总线控制逻辑电路。EU主要包括通用寄存器阵列、算术逻辑单元、控制与定时部件等。2.什么是总线?—般微机中有哪些总线?所谓总线是指计算机中传送信息的一组通信导线,它将各个部件连接成—个整体。在微处理器内部各单元之间传送信息的总线称为片内总线;在微处理器多个外部部件之间传送信息的总线称为片外总线或外部总线。外部总线又分为地址总线、数据总线和控制总线。随着计算机技术的发展,总线的概念越来越重要。微机中常用的系统总线有PC总线、ISA总线、PCI总线等。3.什么是堆栈?它有什么用途?堆栈指针的作用是什么?堆栈是一个按照后进先出的原则存取数据的部件,它是由栈区和栈指针组成的。堆栈的作用是:当主程序调用子程序、子程序调用子程序或中断时转入中断服务程序时,能把断点地址及有关的寄存器、标志位及时正确地保存下来,并能保证逐次正确地返回。堆栈除了有保存数据的栈区外,还有一个堆栈指针SP,它用来指示栈顶的位置。若是“向下生成”的堆栈,随着压入堆栈数据的增加,栈指针SP的值减少。但SP始终指向栈顶。4.在8086CPU中,FR寄存器有哪些标志位?分别说明各位的功能。8086CPU中设置了一个16位的标志寄存器FR,其中用了9位,还有7位保留。9位中有3位作为控制标志,6位作为状态标志。IF:中断控制标志。当IF=1时,允许可屏蔽中断请求;当IF=0时,禁止可屏蔽中断请求。TF:单步运行标志。当TF=1,单步运行;TF=0,连续运行程序。DF:方向标志。当DF=0,串操作时地址按增量修改;DF=1,地址按减量修改。SF:符号(负数)标志。当运算结果的最高位为1(负数)时,SF=1;反之SF=0。ZF:零标志。当运算结果为0,则ZF=1;否则ZF=0。AF:辅助进位/借位标志。当算术运算时低4位有进位/借位,则AF=1;否则AF=0。AF主要用于BCD码运算中进行结果调整。PF:奇偶标志。当运算结果低8位中1的个数为偶数时PF=1;否则PF=0。CF:进位/借位标志。当算术运算结果最高位有进位/借位时,CF=1;否则CF=0。逻辑运算时CF=0,循环移位指令也影响CF标志。OF:溢出标志。当符号数算术运算结果有溢出时OF=1;否则OF=0。5.在8086CPU中,有哪些通用寄存器和专用寄存器?试说明专用寄存器的作用。8086CPU中有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.若CS=8000H,试说明现行代码段可寻址的存储空间范围。若CS=8000H,现行代码段可寻址的存储空间范围为80000H~8FFFFH。7.设现行数据段位于存储器的B0000H~BFFFFH,试说明DS段寄存器的内容。DS=B000H8.设双字12345678H的起始地址为A001H,试说明这个双字在存储器中是如何存放的。地址RAMA0001H78A0002H56A0003H34A0004H12该双字在存储器中的存放如下:9.说明8086的EU和BIU的主要功能。8086CPU的BIU对外提供16位双向数据总线和20位地址总线。它负责完成所有的外部总线操作,即完成取指令、指令排队、读与写操作、地址转换和总线控制。执行单元EU的主要功能是完成指令译码与执行指令工作。EU从BIU的指令队列输出端取得指令,对指令的代码进行译码,产生操作数地址并将其传送给BIU,向BIU申请完成存储器或I/O的读写周期,对操作数进行指令规定的操作。在指令执行期间,EU测试标志位,根据指令执行的结果修改标志位。若指令队列是空的,EU等待下一次取得指令字节,且修改指令队列的输出指针。EU有一个16位的ALU,专门用来对操作数进行算术和逻辑运算。10.说明8086CPU组成的系统中为什么必须使用地址锁存器?8086的数据总线和低16位地址总线是采用分时复用的。当执行存储器读写或I/O读写,在CPU总线周期的T1状态时,作地址总线输出(A15~A0),在其他状态均作为双向数据总线使用。地址总线的高4位A19~A16也是复用线,但他们是地址/状态复用线。为了使地址信息在整个总线周期中均保持有效地址,必须设置地址锁存器把T1状态上输出的20条地址信息进行锁存。11.8086CPU的最大寻址范围是多少?如何实现对整个地址空间寻址?8086的存储器最大寻址范围为1M字节(地址为00000H~FFFFFH);I/O寻址的最大范围为64K(口地址为0000H~FFFFH)。对1M存储器的寻址是通过段寄存器来实现的,每个存储器段为64K字节,1M字节的存储器可以分为若干个64KB段,利用段寄存器可寻址整个存储空间。对I/O空间的寻址可使用直接寻址(对8位口地址);也可使用DX进行间接寻址(对16位口地址)。16.在8086中,地址/数据复用信号是如何区分的?在8086中,地址/数据复用信号是在时间上区分的。在总线周期的T1状态,CPU在这些引脚上输出存储器或I/O端口地址,在T2、T3、T4状态则输出数据收发信号。第3章习题及参考解答1.指出下列各指令中源操作数和目的操作数的寻址方式。(1)MOVDI,100(2)MOVCX.100[SI](3)MOV[SI],AX(4)ADDAX,[BX+DI](5)ANDAX,BX(6)MOVDX,[1000](7)MOVBX,[BP+DI+100](8)PUSHF(9)SUB[1050],CX(10)ANDDH,[BP+4]解源操作数 目的操作数(1)立即寻址 寄存器寻址(2)变址寻址 寄存器寻址(3)寄存器寻址 寄存器间接寻址(4)基址加变址寻址 寄存器寻址(5)寄存器寻址 寄存器寻址(6)直接寻址 寄存器寻址(7)基址加变址寻址 寄存器寻址(8)寄存器寻址 寄存器间接寻址(9)寄存器寻址 直接寻址(10)变址寻址 寄存器寻址2.试述指令MOVAX,2000H和MOVAX,DS:[2000H]的区别?解区别有三条:MOVAX,2000H对源操作数是立即寻址,而MOVAX.[2000H]对源操作数是直接寻址;前者功能是把立即数2000H送入AX中,而后者是把内存2000H单元与2001H单元的内容取出送入AX中;两者的机器代码不同,执行速度也不同,前者执行时间快,后者执行时间慢。4.若DS=4000H,BX=0800H,[40800H]=05AOH,[40802H]=2000H,求执行指令LDSSI,[BX]后,DS与SI中的内容。若上题中的DS换成ES,其他条件不变,求执行指令LESDI,[BX]后,ES与DI中的内容。解SI=05AOH,DS=2000HDI=05AOH,ES=2000H5.若AX=98ABH,BX=A8BCH。求执行指令ADDAX,BX后,AX与BX中的内容,并指出SF,ZF,AF,PF,CF和OF的状态。解AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。6.若CX=6700H,DX=78FFH,CF=1。求分别执行指令(1)ADDCX,DX(2)ADCCX,DX(3)SUBCX,DX(5)ANDCX,DX(6)ORCX,DX(7)XORCX,DX后,CX与DX寄存器中的内容,并指出标志寄存器SF,ZF,AF,PF,CF及OF的状态。解(1)CX=DFFFH,DX=78FFH,SFZFAFPFCFOF=100101B(2)CX=E000H,DX=78FFH,SFZFAFPFCFOF=101101B(3)CX=EE01H,DX=78FFH,SFZFAFPFCFOF=101010B(4)CX=EE00H,DX=78FFH,SFZFAFPFCFOF=101110B(5)CX=6000H,DX=78FFH,SFZFAFPFCFOF=00×100B(6)CX=7FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B(7)CX=1FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B7.若AX=FFFEH,BX=FFFDH,求执行指令IMULBX后,DX与AX中的内容。指出标志位OF与CF的状态。解AX=0006H,DX=0000H,OFCF=00B8.若AL=75H,BL=48H,(1)求执行指令ADDAL,BLDAA之后AL=?标志AF=?CF=?并说明BCD码调整情况。(2)若执行指令SUBAL,BL与DAS后,情况又如何?解(1)AL=23H,AFCF=11B(2)AL=27H,AFCF=10B9.设X、Y、R、S、Z均为16位无符号数的变量。按已给定的表达式Z(X+Y)/(R-S)→Z,有程序如下,试在空格处填入适当的指令(注:在加减过程中均无进位和借位)。MOVAX,X①MOVCX,RSUBCX,S②③MOVZ,AXMOVZ+1,DXHLT解①ADDAX,Y②MULZ③DIVCX10.若有一个四字节数,放在寄存器DX与AX中(DX中放高16位),要求这个4字节数整个左移一位如何实现?右移一位又如何实现?解(1)DX与AX左移一位:SHLAX,01RCLDX,01(2)DX与AX右移一位:SHRDX,01RCRAX,0111.若把1K字节的数据块从偏移地址为1000H开始的单元传送到偏移地址为1400H开始的缓冲区。试用串传送操作指令和一般传送指令两种方法各编一程序实现。解(1)利用串操作指令编程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HCLDREP MOVSBMOVAM,4CHINT21H(2)利用一般传送指令编程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HNEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPNEXTMOVAH,4CHINT21H12.若在内存缓冲区中有一个长度为256个字节的数据块,起始地址偏移量为2000H。数据块中的数据有正有负,要求把其中的正负数分开.分别送至同段的两个缓冲区,存放正数的缓冲区的起始地址偏移量为2100H,存放负数的缓冲区的起始地址偏移量为2200H。试编一程序。解MOVSI,2000HMOVCX,100HXORDX,DXLOOP: MOVAL,[SI]ADDAL,0JNSPLUSINCDHNEXT: INCSIDECCXJNZLOOPJMPSTOPPLUS: INCDLJMPNEXTSTOP: MOV[2100H],DLMOV[2200H],DHMOVAH,4CHINT21H13.若SS=1000H,SP=1000H,AX=1234H,BX=5678H,Flag=2103H,试说明执行指令PUSHBXPUSHAXPUSHFPOPCX之后,SP=?SS=?CX=?并画图指出栈中各单元的内容。解SS=1000H,SP=0FFCH,CX=2103H栈中各单元内容如下:地址 RAM0FFAH 030FFBH 210FFCH 340FFDH 120FFEH 780FFFH 561000H XX14.若DS=1100H,SI=1000H,CS=1200H,IP=100H,[12000H]=2000H,[12002]=1500H,求执行指令(1)CALLFAR[SI]后CS与IP的内容;(2)CALL[SI]后CS与IP的内容。解(1)CS=1500II,IP=2000H(2)CS=1200H,IP=2000H15.若执行指令INT21H后,将转到何处执行程序,指出CS与IP的内容。解将转到0:0086H和0:0084H处取出双字作为CS与IP的值,再执行程序。CS的值为内存单元0:0086H和0:0087H的内容;IP为内存单元0:0084H与0:0085H的内容。16.编一程序使(1)AX寄存器低4位清零;(2)BX寄存器低4位置1;(3)CX寄存器低4位变反;(4)DX寄存器高3位不变,其余位清零。解(1)ANDAX,FFF0H(2)ORBX,000FH(3)XORCX,000FH(4)ANDDX,E000H18.指出下列8086指令中哪些是错误的,错在何处?(1)MOV DL,BX(2)MOV DS,2000H(3)MOV [DI],[SI](4)MOV AX,[BX][BP](5)XCHG CX,[2400H](6)PUSH DH(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为存储器物理地址)。MOVAX,2280HMOVCX.0FFOOHMOVDS,AXMOVSI,CXADDCX,AX ;①CX=H,CF=BMOV[SI],CX ;②[SI]=H.[SI+1]=HADC[SI],AL ;③[SI]=H,MEM=HDECBYTE[SI] ;④[SI]=H,ZFCFPF=BMOVAX,06ADCAX,08 ;⑤AX=H,CFAF=BAAA ;⑥AX=H,CFAF=BADDAL,59H ;⑦AL=H,CFAF=BDAA ;⑧AL=HANDAL,0FHMOVBX,-8NEGBX ;⑨BX=HMOVDL,06MULDL ;⑩AX=HORAX,0FF00HCWD ;⑾AX=HIDIVBX ;⑿AX=H,DX=HMOVAH,4CHINT21H解①CX=2180H,CF=1B②[SI]=80H,[SI+1]=21H③[SI]=01H,MEM=32700H④[SI]=00H,ZFCFPF=111B⑤AX=000FH,CFAF=00B⑥AX=0105H,CFAF=11B⑦AL=5EH,CFAF=00B⑧AL=64H⑨BX=0008H⑩AX=0018H⑾AX=FF18H⑿AX=FFE3H,DX=0000H第4章习题及参考解答1.试编一程序,把地址偏移量为100H单元开始的256个单元分别写入00H,01H,02H,03H,…,FFH数据。解源程序如下DATA SEGMENT ORG100HBUF1 DB256DUP(?)COUNT EQU$-BUF1DATA ENDSSTK SEGMENTSTACK DB100DUP(?)STK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF1 ;戓LEASI,BUF1MOVCX,COUNTXORAL,AL ;或MOVAL,00HNEXT: MOV[SI],ALINCALINCSILOOPNEXTMOVAH,4CHINT21HCODE ENDS ENDSTART2.统计上题写入的数据块中0元素、正元素、负元素的个数,并分别把统计结果送入上述数据块之后的三个单元中。解DATA SEGMENT ORG100HBUF1 DB00H,01H.02H,…,0FEH,0FFH ;共256个数据COUNT EOU$-BUF1 DB3DUP(?)DATA ENDSSTK SEGMENTSTACK DB100DUP(?)STK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVS1,OFFSETBUF1MOCCX,COUNTXORBX,BX ;BL与BH分别存放正、负元素的个数XORDH,DH ;DH寄存器存放0元素个数NEXT2: MOVAL,[SI]CMPAL,0JZZER0 ;若ZF=1,则为0,转至ZERO,DH+1JSNEGAT ;若SF=0则为负数,BH+1INCBL ;既不是0又不是负,则为正数,BL+1 JMPNEXT3ZERO: INCDH ;0的个数加1 JMPNEXT3NEGAT:INCBH ;负数个数加1NEXT3: INCSI ;修改地址指针SI LOOPNEXT2 ;未完,继续循环 MOV[SI],DH ;存入0元素个数统计结果 INCSI MOV[SI],BX ;存入正、负数个数统计结果 MOVAH,4CH INT21HCODE ENDS ENDSTART4.把地址偏移量为STRG1单元开始的128个单元的内容传送到地址偏移量为STRG2开始的单元中。解DATA SEGMENTSTRGl DBXXH,XXH,XXH,….XXH;128个数据COUNT EOU$-STRGlSTRG2 DB128DUP(?)DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETSTRG1MOVDI,OFFSETSTRG2MOVCX,COUNTCLDREPMOVSBMOVAH,4CHINT21HCODE ENDS ENDSTART5.寄存器SI做地址指针,自SI所指的内存单元开始连续存放三个无符号数(以字为单位),编一程序求它们的和,并将结果存放在这三个数之后的单元中。解DATA SEGMENTBUF DWXXH,YYH,ZZHSUM DW?,?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVDI,OFFSETSUMMOVAX,[SI]ADDAX,[SI+2]MOV[DI],AXMOVAX,0ADDCAX,0MOV[DI+2],AXMOVAX,[DI]ADDCAX,[SI+4]MOV[DI],AXMOVAX,0ADDCAX,[DI+2]MOV[DI+2],AXMOVAH,4CHINT21HCODE ENDS ENDSTART6.读下面程序段,问:在什么情况下本段程序的执行结果是AH=0?START:INAL,5FHMOVAH,0JZBRCHMOVAH,0JMPSTOPBRCH: MOVAH,0FFHSTOP: INT20H解当标志寄存器的ZF=0时,执行结果AH=0。(JZ之前的两条指令对零标志没有影响)7.下面语句在存储器中分别为变量分配多少字节?0NE DW10TW0 DW4DUP(?),5THREE DB2DUP(?,8DUP(0))COUNT EQU10FOUR DDCOUNTDUP(?)FIVE DB‘HOWAREYOU?’解ONE DW10 ;为ONE分配2个字节TWO DW4DUP(?),5 ;为TWO分配10个字节THREE DB2DUP(?,8DUP(0)) ;为THREE分配18个字节COUNT EQU10 ;不给COUNT分配存储单元FOUR DDCOUNTDUP(?) ;为FOUR分配40个字节FIVE DB‘HOWAREYOU?’ ;为FIVE分配12个字节8.数据定义语句如下所示:FIRST DB90H,5FH,6EH,69HSECONDDB5DUP(?)THIRD DB5DUP(?)FORTH DBDUP(?)自FIRST单元开始存放的是一个四字节的十六进制数(低位字节在前),要求:(1)编一段程序将这个数左移两位后存放到自SECOND开始的单元(注意保留移出部分);(2)编一段程序将这个数右移两位后存放到自THIRD开始的单元(注意保留移出部分);(3)编一段程序将这个数求补后存放到自FORTH开始的单元。解DATA SEGMENTFIRST DB90H,5FH,6EH,69HSECOND DB5DUP(?)THIRDDB5DUP(?)FORTHDB DUP(?)DATA ENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXCALLSUBP1CALLSUBP2CALLSUBP3MOVAH,4CHINT21HSUBP1 PROCMOVSI,OFFSETFIRSTMOVDI,OFFSETSECONDXORBL,BLMOVCL,2MOVAX,[SI]MOVDX,[SI+2]LOP1: SHLAX,1RCLDX,1RCLBL,1DECCLJNZLOP1MOV[DI],AXMOV[DI+2],DXMOV[DI+4],BLRETSUBP1 ENDPSUBP2 PROCMOVSI,OFFSETFIRSTMOVDI,OFFSETTHIRDXORBL,BLMOVCL,2MOVAX,[SI]MOVDX,[SI+2]LOP2: SHRDX,1RCRAX,1RCRBL,1DECCLJNZLOP2MOV[DI],BLMOV[DI+1],AXMOV[DI+3],DXRETSUBP2 ENDPSUBP3 PROCMOVSI,OFFSETFIRSTMOVDI,OFFSETFORTHMOVAX,[SI]MOVDX,[SI+2]NOTAXNOTDXADDAX,1ADCDX,0MOV[DI],AXMOV[DI+2],DXRETSUBP3 ENDPCODE ENDS ENDSTART9.指令语句ANDAX,OPD1ANDOPD2中,OPD1和OPD2是两个已赋值的变量,问两个AND操作分别在什么时间进行?有什么区别?解前面的AND是指令,在程序运行时执行,后面的AND是运算符,在汇编的时候由汇编程序计算,表达式计算结果出现在执行程序中。二者的区别在于,前者是指令,程序运行时执行,后者是运算符,汇编时计算。10.如下指令或程序是否有错,若有错,请指出错在哪里?(1)KI EOU1024 ┇ MOVK1,AX(2) MOVDS,100 MOV[1000],[2000](3)IMP DB? ┇ MOVIMP,AX(4)A1 DB?A2 DB10 ┇ CMPA1,A2(5)将1000送入X1单元,用如下程序:X1 DB? ┇ MOVBX,X1 MOV[BX],1000解(1)MOVK1,AX错。因为K1为立即数,它不能作为目的操作数。(2)这两条指令都是错的。第一条立即数不能直接送给段寄存器;第二条两个操作数不能同时为内存操作数。(3)MOVIMP,AX错。两操作数类型不匹配,IMP是一字节内存单元,而AX寄存器中为16位数据。(4)CMPA1,A2错。两个操作数A1与A2不能同时为内存操作数。(5)MOV[BX],1000错。两操作数类型不匹配,[BX]只定义了一字节单元,而1000是16位数据。11.8086汇编语言程序中段的类型有几种?各段如何定义?段定义语句中,定位类型、组合类型、类别各起什么作用?各有什么含义?解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 KBDINPUTCODE SEGMENT ASSUMECS:CODE,DS:CODE ORG100HSTART:JMPBEGINBUF DB41NUMB DB?CHARS DB41DUP(?)MSG1 DB'Typeanything,followedbyenter.',0DH,0AH,'$'MSG2 DB 0DH,0AH,'ContentsoftheKBDinputbuf:',0DH,0AH,'$'BEGIN:MOVAX,CSMOVDS,AXMOVDX,OFFSETMSG1MOVAH,9INT21HMOVDX,OFFSETBUFMOVAH,0AHINT21HMOVDX,OFFSETMSG2MOVAH,9INT21HXORBX,BXMOVBL,NUMBMOVCHARS[BX],'$'MOVDX,OFFSETCHARSMOVAH,9INT21HMOVAH,4CHINT21HCODE ENDS ENDSTART说明本题把数据区放在代码段中,没有单独定义数据段。并且用ORG100H语句把程序起始地址的偏移量放在100H开始的单元,用JMPBEGIN指令跳过数据区,这样可以把该程序经汇编、连接后的执行程序(.EXE)用EXE2BIN软件生成.COM文件。或:DATA SEGMENTBUF DB41NUMB DB?CHARS DB41DUP(?)MSG1 DB'Typeanything,followedbyenter.',0DH,0AH,'$'MSG2 DB 0DH,0AH,'ContentsoftheKBDinputbuf:',0DH,0AH,'$'DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMSG1MOVAH,9INT21HMOVDX,OFFSETBUFMOVAH,0AHINT21HMOVDX,OFFSETMSG2MOVAH,9INT21HXORBX,BXMOVBL,NUMBMOVCHARS[BX],'$'MOVDX,OFFSETCHARSMOVAH,9INT21HMOVAH,4CHINT21HCODE ENDS ENDSTART13.某软件共可接收10个键盘命令(分别为A,B,C,…,J),完成这10个命令的程序分别为过程P0,P1,…,P9。编一程序从键盘接收命令,并转到相应的过程去执行。要求用两种方法:(1)用比较、转移指令实现;(2)用跳转表实现。解(1)用比较、转移指令实现CODE SEGMENT ASSUMECS:CODE ORG100HSTART:JMPBEGlNMSG DB'Errorcharacter!',0DH,OAH,'$'BEGlN:MOVAX,CS MOVDS,AXMOVAH,1INT21HCMPAL,'A'JZPS0CMPAL,'B'JZPS1CMPAL,'C'JZPS2CMPAL,'D'JZPS3CMPAL,'E'JZPS4CMPAL,'F'JZPS5CMPAL,'G'JZPS6CMPAL,'H'JZPS7CMPAL,'I'JZPS8CMPAL,'J'JZPS9MOVDX,OFFSETMSGMOVAH,9INT21HJMPBEGINPS0: CALLP0 JMPBEGINPS1: CALLP1 JMPBEGINPS2: CALLP2 JMPBEGIN ┇PS9: CALLP9 JMPBEGINMOVAH,4CHINT21HP0 PROC┇ RETP0 ENDPP1 PROC┇ RETP1 ENDP┇P9 PROC┇ RETP9 ENDPCODE ENDS ENDSTART或: DATA SEGMENTMSG DB'Errorcharacter!',0DH,OAH,'$'DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA ORG100HSTART:MOVAX,DATA MOVDS,AXMOVAH,1INT21HCMPAL,'A'JZPS0CMPAL,'B'JZPS1CMPAL,'C'JZPS2CMPAL,'D'JZPS3CMPAL,'E'JZPS4CMPAL,'F'JZPS5CMPAL,'G'JZPS6CMPAL,'H'JZPS7CMPAL,'I'JZPS8CMPAL,'J'JZPS9MOVDX,OFFSETMSGMOVAH,9INT21HJMPBEGINPS0: CALLP0 JMPBEGINPS1: CALLP1 JMPBEGINPS2: CALLP2 JMPBEGIN ┇PS9: CALLP9 JMPBEGINMOVAH,4CHINT21HP0 PROC┇ RETP0 ENDPP1 PROC┇ RETP1 ENDP┇P9 PROC┇ RETP9 ENDPCODE ENDS ENDSTART(2)用跳转表实现DATA SEGMENTPTAB DW0000H;FirstprogramentranceDW0100HDW0200HDW0300HDW0400HDW0500HDW0600HDW0700HDW0800HDW0900H;NineteenthprogramentranceDATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXMOVBX,OFFSETPTABMOVAH,1INT21HXORAH,AHSUBAL,41HLOP: SHLAX,1ADDBX,AXJMPWORDPTR[BX]讨论实现该题的功能用两种方法都可以,显然,用跳转表实现要简单快捷得多。所以遇到多分支程序结构时采用跳转表比用条件转移指令更方便。14.内存自BUFF单元的缓冲区连续放着512个学生的英文分数,编程序统计其中90~100,60~89,60分以下者各有多少人,并把结果连续存放到RESULT开始的单元中。解DATA SEGMENTBUFl DB86,92,65,78,45,88,55,100,…,76;共有512个字节数据,数据范围为0~100COUNT EOU$-BUF1RESULT DW3DUP(?)DATA ENDSSTACK SEGMENTSTACK'STACK'STAPN DB100HDUP(?)STACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF1MOVDI,OFFSETRESULTMOVCX,COUNTCLDXORBX,BX ;BX存放90~100分的学生个数XORDX,DX ;DX存放60~89分的学生个数XORBP,BP ;BP存放00~59分的学生个数NEXT: LODSB ;取学生分数CMPAL,90 ;是否大干等于90分JNCNEXT1 ;大于等于90分,转到BX+1CMPAL,60 ;是否大于等于60分JNCNEXT2 ;大干等于60分,转到DX+1INCBP ;小于60分,BP+1JMPDONENEXT1:INCBX ;90~100分的个数加1 JMPDONENEXT2:INCDX ;60~89分的个数加1DONE: LOOPNEXTMOV[DI],BXADDDI,2MOV[DI],DXADDDI,2MOV[DI],BPMOVAH,4CHINT21HCODE ENDS ENDSTART15.设有一数据块,共有100个字节,试找出数据块中最大者,并把它送至MAX单元中。解CODE SEGMENT ASSUMECS:CODE,DS:CODE 0RG100HSTART:JMPBEGINBUF DB12H,56H,0ABH,…,0FDH,00H;共100个字节无符号数COUNT EQU$-BUFMAX DB?BEGIN:MOVAX,CSMOVDS,AXMOVSI,OFFSETBUFMOVCX,COUNTMOVAL,[SI]LOP1: INCSICMPAL,[SI]JGLOP2XCHGAL,[SI] ;用MOVAL,[SI]似乎要好一些,不会破坏原始数据。LOP2: LOOPLOP1MOVMAX,ALMOVAH,4CHINT21HCODE ENDS ENDSTART或:DATA SEGMENTBUF DB12H,56H,0ABH,…,0FDH,00H;共100个字节无符号数COUNT EQU$-BUFMAX DB?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA 0RG100HSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVCX,COUNTMOVAL,[SI]LOP1: INCSICMPAL,[SI]JGLOP2XCHGAL,[SI] ;用MOVAL,[SI]似乎要好一些,不会破坏原始数据。LOP2: LOOPLOP1MOVMAX,ALMOVAH,4CHINT21HCODE ENDS ENDSTART19.在偏移量为First和Two的内存单元中,分别有两个双字节带符号数X和Y。试编一程序,若X<Y,则清除中断标志,否则就把方向标志置位。解DATA SEGMENTFIRST DWXTW0 DWYDATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETFIRSTMOVAX,[SI]ADDSI,2MOVBX,[SI]CMPAX,BXJLZCL1STDJMPSTOPZCL1: CLISTOP: MOVAH,4CH INT21HCODE ENDS ENDSTART2l.编一程序,把键入的十六进制数转换成十进制数并在屏幕上显示出来。键入的最大数为FFFFH,若键入的不是十六进制数字,则显示出错提示。解参看例4.1626.编一子程序,在指定的内存区域中搜索指定的字节,如找到,则返回该字节的位置,否则返回-1。要求使用堆栈传递参数,同时提供子程序清单。要求同时提供一个测试用的主程序,以使所有程序可以运行和验证。解:DATA SEGMENTBUF DB01H,02H,03H,04H,05H,06H,07H,08H,09H ;数据块COUNT EQU$-BUF ;块长度KEYB DB05H ;搜索的字节值ADDRRDW? ;存放结果单元DATA ENDSSTACKSEGMENTSTACK DB10DUP('STACK') ;堆栈区,填充STACK字符STACKENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART: MOVAX,DATA ;主程序 MOVDS,AX LEASI,BUF MOVCX,COUNT LEADI,ADDRR MOVAL,KEYB PUSHSI ;内存区首地址入栈 PUSHCX ;数据块长度入栈 PUSHDI ;结果单元地址入栈 PUSHAX ;待搜索的关键字入栈 CALLFINDK ;调用搜索子程序 MOVAH,4CH INT21HFINDK PROC ;搜索子程序 MOVBP,SP ;取栈顶位置到BP MOVAX,[BP+2] ;取搜索的关键字到AX(AL) MOVDI,[BP+4] ;取结果单元地址到DI MOVCX,[BP+6] ;取数据块长度到CX MOVSI,[BP+8] ;取内存区首地址到SI MOVWORDPTR[DI],-1 ;置未搜索到标志-1LOP: CMPAL,[SI] JNZNEXT MOV[DI],SI ;搜索到,将该字节的地址送结果单元 JMPEXITNEXT: INCSI LOOPLOPEXIT: RET8 ;返回并清除栈区中传递的参数FINDK ENDPCODE ENDS ENDSTART第2章习题参考解答1.8086处理器内部一般包括哪些主要部分?8086处理器与其他处理器一样,其内部有算术逻辑部件、控制与定时部件、总线与总线接口部件、寄存器阵列等。按功能结构可分为两部分,即总线接口单元(BIU)与执行单元(EU)。BIU主要包括段寄存器、内部通信寄存器、指令指针、6字节指令队列、20位地址加法器和总线控制逻辑电路。EU主要包括通用寄存器阵列、算术逻辑单元、控制与定时部件等。2.什么是总线?—般微机中有哪些总线?所谓总线是指计算机中传送信息的一组通信导线,它将各个部件连接成—个整体。在微处理器内部各单元之间传送信息的总线称为片内总线;在微处理器多个外部部件之间传送信息的总线称为片外总线或外部总线。外部总线又分为地址总线、数据总线和控制总线。随着计算机技术的发展,总线的概念越来越重要。微机中常用的系统总线有PC总线、ISA总线、PCI总线等。3.什么是堆栈?它有什么用途?堆栈指针的作用是什么?堆栈是一个按照后进先出的原则存取数据的部件,它是由栈区和栈指针组成的。堆栈的作用是:当主程序调用子程序、子程序调用子程序或中断时转入中断服务程序时,能把断点地址及有关的寄存器、标志位及时正确地保存下来,并能保证逐次正确地返回。堆栈除了有保存数据的栈区外,还有一个堆栈指针SP,它用来指示栈顶的位置。若是“向下生成”的堆栈,随着压入堆栈数据的增加,栈指针SP的值减少。但SP始终指向栈顶。4.在8086CPU中,FR寄存器有哪些标志位?分别说明各位的功能。8086CPU中设置了一个16位的标志寄存器FR,其中用了9位,还有7位保留。9位中有3位作为控制标志,6位作为状态标志。IF:中断控制标志。当IF=1时,允许可屏蔽中断请求;当IF=0时,禁止可屏蔽中断请求。TF:单步运行标志。当TF=1,单步运行;TF=0,连续运行程序。DF:方向标志。当DF=0,串操作时地址按增量修改;DF=1,地址按减量修改。SF:符号(负数)标志。当运算结果的最高位为1(负数)时,SF=1;反之SF=0。ZF:零标志。当运算结果为0,则ZF=1;否则ZF=0。AF:辅助进位/借位标志。当算术运算时低4位有进位/借位,则AF=1;否则AF=0。AF主要用于BCD码运算中进行结果调整。PF:奇偶标志。当运算结果低8位中1的个数为偶数时PF=1;否则PF=0。CF:进位/借位标志。当算术运算结果最高位有进位/借位时,CF=1;否则CF=0。逻辑运算时CF=0,循环移位指令也影响CF标志。OF:溢出标志。当符号数算术运算结果有溢出时OF=1;否则OF=0。5.在8086CPU中,有哪些通用寄存器和专用寄存器?试说明专用寄存器的作用。8086CPU中有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.若CS=8000H,试说明现行代码段可寻址的存储空间范围。若CS=8000H,现行代码段可寻址的存储空间范围为80000H~8FFFFH。7.设现行数据段位于存储器的B0000H~BFFFFH,试说明DS段寄存器的内容。DS=B000H8.设双字12345678H的起始地址为A001H,试说明这个双字在存储器中是如何存放的。地址RAMA0001H78A0002H56A0003H34A0004H12该双字在存储器中的存放如下:9.说明8086的EU和BIU的主要功能。8086CPU的BIU对外提供16位双向数据总线和20位地址总线。它负责完成所有的外部总线操作,即完成取指令、指令排队、读与写操作、地址转换和总线控制。执行单元EU的主要功能是完成指令译码与执行指令工作。EU从BIU的指令队列输出端取得指令,对指令的代码进行译码,产生操作数地址并将其传送给BIU,向BIU申请完成存储器或I/O的读写周期,对操作数进行指令规定的操作。在指令执行期间,EU测试标志位,根据指令执行的结果修改标志位。若指令队列是空的,EU等待下一次取得指令字节,且修改指令队列的输出指针。EU有一个16位的ALU,专门用来对操作数进行算术和逻辑运算。10.说明8086CPU组成的系统中为什么必须使用地址锁存器?8086的数据总线和低16位地址总线是采用分时复用的。当执行存储器读写或I/O读写,在CPU总线周期的T1状态时,作地址总线输出(A15~A0),在其他状态均作为双向数据总线使用。地址总线的高4位A19~A16也是复用线,但他们是地址/状态复用线。为了使地址信息在整个总线周期中均保持有效地址,必须设置地址锁存器把T1状态上输出的20条地址信息进行锁存。11.8086CPU的最大寻址范围是多少?如何实现对整个地址空间寻址?8086的存储器最大寻址范围为1M字节(地址为00000H~FFFFFH);I/O寻址的最大范围为64K(口地址为0000H~FFFFH)。对1M存储器的寻址是通过段寄存器来实现的,每个存储器段为64K字节,1M字节的存储器可以分为若干个64KB段,利用段寄存器可寻址整个存储空间。对I/O空间的寻址可使用直接寻址(对8位口地址);也可使用DX进行间接寻址(对16位口地址)。16.在8086中,地址/数据复用信号是如何区分的?在8086中,地址/数据复用信号是在时间上区分的。在总线周期的T1状态,CPU在这些引脚上输出存储器或I/O端口地址,在T2、T3、T4状态则输出数据收发信号。第3章习题及参考解答1.指出下列各指令中源操作数和目的操作数的寻址方式。(1)MOVDI,100(2)MOVCX.100[SI](3)MOV[SI],AX(4)ADDAX,[BX+DI](5)ANDAX,BX(6)MOVDX,[1000](7)MOVBX,[BP+DI+100](8)PUSHF(9)SUB[1050],CX(10)ANDDH,[BP+4]解源操作数 目的操作数(1)立即寻址 寄存器寻址(2)变址寻址 寄存器寻址(3)寄存器寻址 寄存器间接寻址(4)基址加变址寻址 寄存器寻址(5)寄存器寻址 寄存器寻址(6)直接寻址 寄存器寻址(7)基址加变址寻址 寄存器寻址(8)寄存器寻址 寄存器间接寻址(9)寄存器寻址 直接寻址(10)变址寻址 寄存器寻址2.试述指令MOVAX,2000H和MOVAX,DS:[2000H]的区别?解区别有三条:MOVAX,2000H对源操作数是立即寻址,而MOVAX.[2000H]对源操作数是直接寻址;前者功能是把立即数2000H送入AX中,而后者是把内存2000H单元与2001H单元的内容取出送入AX中;两者的机器代码不同,执行速度也不同,前者执行时间快,后者执行时间慢。4.若DS=4000H,BX=0800H,[40800H]=05AOH,[40802H]=2000H,求执行指令LDSSI,[BX]后,DS与SI中的内容。若上题中的DS换成ES,其他条件不变,求执行指令LESDI,[BX]后,ES与DI中的内容。解SI=05AOH,DS=2000HDI=05AOH,ES=2000H5.若AX=98ABH,BX=A8BCH。求执行指令ADDAX,BX后,AX与BX中的内容,并指出SF,ZF,AF,PF,CF和OF的状态。解AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。6.若CX=6700H,DX=78FFH,CF=1。求分别执行指令(1)ADDCX,DX(2)ADCCX,DX(3)SUBCX,DX(5)ANDCX,DX(6)ORCX,DX(7)XORCX,DX后,CX与DX寄存器中的内容,并指出标志寄存器SF,ZF,AF,PF,CF及OF的状态。解(1)CX=DFFFH,DX=78FFH,SFZFAFPFCFOF=100101B(2)CX=E000H,DX=78FFH,SFZFAFPFCFOF=101101B(3)CX=EE01H,DX=78FFH,SFZFAFPFCFOF=101010B(4)CX=EE00H,DX=78FFH,SFZFAFPFCFOF=101110B(5)CX=6000H,DX=78FFH,SFZFAFPFCFOF=00×100B(6)CX=7FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B(7)CX=1FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B7.若AX=FFFEH,BX=FFFDH,求执行指令IMULBX后,DX与AX中的内容。指出标志位OF与CF的状态。解AX=0006H,DX=0000H,OFCF=00B8.若AL=75H,BL=48H,(1)求执行指令ADDAL,BLDAA之后AL=?标志AF=?CF=?并说明BCD码调整情况。(2)若执行指令SUBAL,BL与DAS后,情况又如何?解(1)AL=23H,AFCF=11B(2)AL=27H,AFCF=10B9.设X、Y、R、S、Z均为16位无符号数的变量。按已给定的表达式Z(X+Y)/(R-S)→Z,有程序如下,试在空格处填入适当的指令(注:在加减过程中均无进位和借位)。MOVAX,X①MOVCX,RSUBCX,S②③MOVZ,AXMOVZ+1,DXHLT解①ADDAX,Y②MULZ③DIVCX10.若有一个四字节数,放在寄存器DX与AX中(DX中放高16位),要求这个4字节数整个左移一位如何实现?右移一位又如何实现?解(1)DX与AX左移一位:SHLAX,01RCLDX,01(2)DX与AX右移一位:SHRDX,01RCRAX,0111.若把1K字节的数据块从偏移地址为1000H开始的单元传送到偏移地址为1400H开始的缓冲区。试用串传送操作指令和一般传送指令两种方法各编一程序实现。解(1)利用串操作指令编程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HCLDREP MOVSBMOVAM,4CHINT21H(2)利用一般传送指令编程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HNEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPNEXTMOVAH,4CHINT21H12.若在内存缓冲区中有一个长度为256个字节的数据块,起始地址偏移量为2000H。数据块中的数据有正有负,要求把其中的正负数分开.分别送至

温馨提示

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

评论

0/150

提交评论