资源描述
习题1:1. 微机基本结构是什么?微处理器、微型计算机、微型计算机系统有何区别?2. 用二进制补码表示-41、+74、112?3. 数值转换:114.175= ( ) 2=( )16 11001.101B= ( )16= ( )104. 计算机内有一个字节代码10110110B(1) 若把它作为无符号数,则与之对应的十进制是( );(2) 若把它作为有符号补码,则与之对应的十进制是( );(3) 若把它作为ASCII码,而且最高位为奇偶校验位,则采用的是奇校验还是偶校验?该值是什么字符的ASCII码?ASCII码主要用于做什么?(4) 若把它作为非压缩BCD码,则对应的十进制数为( )?注:奇、偶校验的概念l 校验位与数值位中1的个数为偶数,则是偶校验l 校验位与数值位中1的个数为奇数,则是奇校验(5) 8086中PF标志对运算结果的低8位进行校验,请问采用的是奇校验还是偶校验?5. 在计算机中有符号字节数X=20H, Y=90H,请问X+Y=?结果是否有溢出;XY=?结果是否有溢出。6. 计算机中有符号数如何表示,一个字的有符号数范围是多少?7. 什么是总线,微机中按什么原则来使用总线?8. 总线按照功能分为那几类总线?按照在计算机中所处的位置又分为那几类总线?ISA、EISA、PCI三种局部总线有何特点?9. 计算机总线连接时为什么需要使用三态电路和锁存器?选作题:10. CISC架构的计算机与RISC架构的计算机有何区别?11. 浮点数在计算机中以何种格式进行存储?请举例说明习题1答案:1. 微机的基本结构包括主机和外设,主机又包括CPU、存储器、I/O接口和总线,外设包括输入设备和输出设备;微处理器主要指CPU;微型计算机包括主机和外设,其中主机包括微处理器,主要针对硬件部分;微型计算机系统包括微型计算机和软件系统,能够独立运行。2. -41 = (11010111)2 +74 = (01001010)2 -112 = ( 10010000 )23. 数值转换:114.175= ( 0111 0010. 0011 ) 2=( 72.3 )16 (近似值) 11001.101B= ( 19.A )16= ( 25.625 )104. 182;-74;奇校验,6,ASCII用于计算机与外部交换信息;6;奇校验5 . X + Y 00100000 + 10010000 = 10110000 结果不溢出X Y00100000 - 10010000 = 10010000 结果溢出6计算机中有符号数用补码表示,一个字的范围是-32768 327677. 总线是用于传输信息的一组通信线;微机中按照分时复用原则使用总线; 8. 按照功能分为:地址总线、数据总线和控制总线;按照位置分为:CPU总线、局部总线、系统总线和外部总线ISA总线 宽度为16位,频率为8MHz,传输率为16MB/SEISA总线是ISA总线的增强,宽度32位,频率8MHz,传输率为32MB/sPCI总线总线宽度32位,可扩展到64位,总线频率33MHz,也可提高到66MHz,传输率为132MB/s,可扩展到528MB/s,支持即插即用9. 使用三态门可以增加驱动,用作数据输入到总线时的缓冲,当需要总线时,打开三态门,传送数据;不需要总线时,关闭三态门,输出为高阻状态,以便别的器件可以使用总线,因此多个器件接入总线时,一定要使用三态电路;使用D触发器可以进行信号保持,用作信息输出时的锁存习题2:1. 在8086微处理器中执行如下指令后,标志寄存器中状态标志为何值?MOV DX, 6E07HSUB DX, 800AH2. 8086管理的最大存储器空间和I/O端口空间是多少,写出地址范围?为什么8086对存储器要采用分段管理?3. 若程序执行之前,CSE000H和IPFE60H,则该程序入口物理地址是多少?指向这个入口地址的CS和IP的值是唯一的吗?4. 请画出8088最小模式下的总线连接电路?要求包含8282 、8284 、8286。(注意8086与8088处理器的三点区别)5. 8086的RESET引脚是什么信号有效? 8086复位后各寄存器的值是多少?指令队列的状态是什么?CPU执行的第一条指令物理地址是多少?6. 8086/8088可以响应可屏蔽中断和非可屏蔽中断,可屏蔽中断由_引脚的_电平使申请有效,FLAG中的_标志可以控制CPU是否响应这种中断,可屏蔽中断响应时,CPU使_引脚为_电平表明响应中断;非屏蔽中断申请输入端为_引脚,该引脚是_信号有效。7. 8086 CPU在最小模式下M/IO高电平且RD低电平的可能操作为_(多选)(A) 取指令操作 (B) 从外设输入数据(C) 向存储器写数据 (D) 从存储器读数据8. 8086微处理器中,数据段由段寄存器_指示,堆栈段由段寄存器_指示,寄存器CS:IP总是指示_地址,一般情况下,取出一个字节指令后,寄存器_会自动加1。在硬件上可以用_和_来改变IP的内容,在软件上可以通过_和_来改变IP的内容。9. 如图所示,8086工作在最小模式,且AL = 80H,执行MOV 1000H, AL指令过程中(假设DS = 0000H),请问1000H和80H两个数分别在什么时候,出现在8086 CPU的那些引脚上?CLKM/IOA19A16BHEALEWRDT/RDENT1T2T3T4地址地址数据AD15AD0S3 S6选作题:1. 80386内部包括那6个功能部件?80386有那三种工作方式?2. 80386如何在8086的基础上扩展了数据寄存器和地址指针寄存器?3. 80386有多少根地址线和数据线?其最大寻址范围是多少?80386对存储器如何采用分段和分页管理?4. 80386的虚拟存储机制是什么样的?1. 8086微处理器内部包括执行单元EU和总线接口单元BIU,请简要说明两个部分主要功能是什么?请指出下列哪些部分属于EU,哪些部分属于BIU?(8分)1)段寄存器CS、DS、ES、SS2)预取指令缓冲队列3)地址指针寄存器SP、BP、SI、DI4)指令译码及控制5)数据寄存器AX、BX、CX、DX6)指令指针寄存器IP7)20位物理地址加法器8)总线接口控制电路9)算术逻辑单元ALU10)标志寄存器FLAG 属于EU的有 _、_、_、_、_属于BIU的有_、_、_、_、_2. 按照图4-1连接,8088从存储器读取数据,若DS=B000H,则执行指令MOV AL, E000H时,8088需要执行以下一系列处理,请标明处理的先后顺序。(6分)A. CPU发读命令;B. BIU形成20位物理地址;C. BIU将系统数据总线上的数据送到CPU内部总线,EU从内部总线获得数据;D. EU计算得到有效地址,并传送给BIU;E. 存储器将被选中单元的内容送系统数据总线;F. CPU输出物理地址,经锁存后传送到地址译码器,选择相应存储器;先后顺序为:_、_、_、_、_、_。5.习题3:1、8086系统中,请说明下列指令的源操作数的寻址方式是什么?1)MOV AX, 1234H2)MOV AX, 1234H3)MOV AX, BX4)MOV AX, 1234HBX + SI5)MOVSB6)IN AL, DX2、请在下表中画出下列数据段以十六进制表示的各单元值(表格中每个单元表示一个字节),并写出变量var1, var2, var3的偏移地址和cnt的值。0030H低地址高地址data SEGMENT para ORG 30Hvar1 DB -2, A, 2 dup(23)var2 DW -1cnt EQU $-var1var3 DW var2data ENDS3、以下程序实现将变量var进行var*10+600的操作,并将计算结果保存在变量result中,当程序执行到地址M5的时候,请在以下表格中画出当前堆栈指针的位置和堆栈里的内容(程序断点可以用标号,在堆栈中可用寄存器名代表保存的内容,SS的内容不用指定,表格的每个单元表示一个字)。(6分)高地址低地址data segment var dw 1000result dd ?data endssseg segment stackdb 100 dup(?)sseg endscode segment assume cs:code, ds:data, ss:ss_segmain proc farpush dsmov ax, 0push axmov ax, datamov ds, axmov ax, varM1:call CaculateM2:dw 10M3:dw 600M4:lea bx, resultmov bx, axmov bx+2, dxretmain endpCaculate proc pushbpmovbp, sppushsipushbxmovbx, bp+2movsi, cs:bxmulsiM5:addax, cs:2bxadcdx, 0addbx, 4movbp+2, bxpopbxpopsipopbpretCaculate endpcode endsend main4、问答题1)若AL = 81H,则执行指令CBW后AH的内容为多少?2)若BL = BEH,执行下列指令序列,则每执行一步,BL和CF的值为多少?SHL BL, 1 ;BL = _, CF = _MOV CL, 2SHR BL, CL ; BL = _, CF = _OR BL, 80SAR BL, 1 ; BL = _, CF = _ROR BL,CL ; BL = _, CF = _INC CLRCL BL, CL BL = _, CF = _3)什么是短跳转、近跳转、远跳转?4)若当前SP = 1000H,CS = B000H ,IP = 0100H,且当前FLAG = 2345H,则执行指令INT 21H以后,SP的值变为多少?堆栈段中6个存储单元0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH的值分别是多少?5、请写出程序段实现下列功能例如:从160H端口读取1个字节 MOV DX, 160H IN AL, DX1) 将一个8位数20H写入到地址为20H的端口;2) 若AL = 56H, BL = 57H,将这两个压缩格式BCD码相加并将结果保存到存储单元2000H中;3) 将2个32位无符号数DAT1和DAT2相乘,结果保存在64位无符号数中,请编写程序段。4) 求数据段偏移地址为1000H开始的一个字符串的长度,字符串以ASCII码0为结束符,长度要求包括结束符;(提示:初始化AL = 0 CX = 0FFFFH,然后使用REPNZ SCASB命令,最后根据CX的值计算字符串长度)习题3:1、8086系统中,请说明下列指令的源操作数的寻址方式是什么?1)MOV AX, 1234H立即数寻址2)MOV AX, 1234H直接寻址3)MOV AX, BX寄存器间接寻址4)MOV AX, 1234HBX + SI相对基址变址寻址5)MOVSB数据串寻址6)IN AL, DXI/O端口间接寻址2、请在下表中画出下列数据段以十六进制表示的各单元值(表格中每个单元表示一个字节),并写出变量var1, var2, var3的偏移地址和cnt的值。FEH0030H低地址高地址data SEGMENT para41H ORG 30H32Hvar1 DB -2, A, 2 dup(23)32H33Hvar2 DW -1FFH33Hcnt EQU $-var1FFHvar3 DW var200H36Hdata ENDSvar1: 0030Hvar2:0036Hvar3:0038Hcnt = 83、以下程序实现将变量var进行var*10+600的操作,并将计算结果保存在变量result中,当程序执行到地址M5的时候,请在以下表格中画出当前堆栈指针的位置和堆栈里的内容(程序断点可以用标号,在堆栈中可用寄存器名代表保存的内容,SS的内容不用指定,表格的每个单元表示一个字)。(6分)DS高地址低地址data segment M20var dw 1000BPresult dd ?BXSIdata endssseg segment stackdb 100 dup(?)sseg endscode segment assume cs:code, ds:data, ss:ss_segmain proc farpush dsmov ax, 0push axmov ax, datamov ds, axmov ax, varM1:call CaculateM2:dw 10M3:dw 600M4:lea bx, resultmov bx, axmov bx+2, dxretmain endpCaculate proc pushbpmovbp, sppushsipushbxmovbx, bp+2movsi, cs:bxmulsiM5:addax, cs:2bxadcdx, 0addbx, 4movbp+2, bxpopbxpopsipopbpretCaculate endpcode endsend main4、问答题1)若AL = 81H,则执行指令CBW后AH的内容为多少?AH = 0FFH2)若BL = BEH,执行下列指令序列,则每执行一步,BL和CF的值为多少?SHL BL, 1 ;BL = _7CH_, CF = _1_MOV CL, 2SHR BL, CL ; BL = _1FH_, CF = _0_OR BL, 80SAR BL, 1 ; BL = _CFH_, CF = _1_ROR BL,CL ; BL = _F3H_, CF = _1_INC CLRCL BL, CL BL = _BFH_, CF = _1_3)什么是短跳转、近跳转、远跳转?短跳转:段内直接跳转,偏移量为-128127近跳转:段内直接跳转,偏移量为-3276832767 远跳转:段间直接跳转4)若当前SP = 1000H,CS = B000H ,IP = 0100H,且当前FLAG = 2345H,则执行指令INT 21H以后,SP的值变为多少?堆栈段中6个存储单元0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH的值分别是多少?SP = 0FFAH,(0FFFH) = 23H(0FFEH) = 45H(0FFDH) = B0H(0FFCH) = 00H(0FFBH) = 01H(0FFAH) = 00H5、请写出程序段实现下列功能例如:从160H端口读取1个字节 MOV DX, 160H IN AL, DX5) 将一个8位数20H写入到地址为20H的端口;MOVAL, 20HOUT20H, AL6) 若AL = 56H, BL = 57H,将这两个压缩格式BCD码相加并将结果保存到存储单元2000H中;ADDAL, BLDAAMOV2000H, AL7) 将2个32位无符号数DAT1和DAT2相乘,结果保存在64位无符号数中,请编写程序段。DAT1DD12345678HDAT2DD9ABCDEFHRESULTDQ0MOVAX, word ptr DAT2;(DAT1)L * (DAT2)LMULword ptr DAT1MOVword ptr RESULT, AXMOVword ptr RESULT, DX;保存结果MOVAX, word ptr DAT2MULword ptr DAT1 + 2;(DAT1)H * (DAT2)LADDword ptr RESULT + 2, AXADCword ptr RESULT + 4, 0MOVAX, word ptr DAT2 + 2;(DAT1)L * (DAT2)HMULword ptr DAT1ADDword ptr RESULT + 2, AXADCword ptr RESULT + 4, DXADCword ptr RESULT + 6, 0MOVAX, word ptr DAT2 + 2;(DAT1)H * (DAT2)HMULword ptr DAT1 + 2ADDword ptr RESULT + 4, AXADCword ptr RESULT + 6, DX8) 求数据段偏移地址为1000H开始的一个字符串的长度,字符串以ASCII码0为结束符,长度要求包括结束符;(提示:初始化AL = 0 CX = 0FFFFH,然后使用REPNZ SCASB命令,最后根据CX的值计算字符串长度)MOVAX, DSMOVES, AXMOVDI, 1000HMOVAL, 0MOVCX, 0FFFFHCLDREPNZSCASBNOTCX;或者MOVAX, 0FFFFH;SUBAX, CX;MOVCX, AX;此时CX中存放的就是字符串的长度9)习题3:1. 从屏幕上输入小写字母,转换为大写字母并输出要求:程序具有可读性、容错性2. 编写一子程序asc2bin,将ASCII转换为二进制数要求:输入参数:AL中存放需要转换的ASCII输出参数:AL中存放转换后的二进制数并返回3. 内存中存放8个16位有符号数,求8个数值之和,并将结果存放在内存变量SUM中注:程序中应用到字扩展为双字的指令CWD4. 内存中存放8个8位有符号数,请按从大到小顺序排列5. 内存中有8个16位数,请编写程序将8个数倒序排放例:定义内存中8个数bufdw100, 3, 1, 20, 40, -2, 7, 10程序运行后,buf开始应为:buf dw 10, 7, -2, 40, 20, 1, 3, 1006. 从键盘输入4位十进制数,然后以16进制形式显示在屏幕上.例:键盘输入:1024屏幕上应显示:0400H要求:键盘输入和显示结果时均应有提示7. 数据段从100H开始存放字符串str1,从200H开始存放str2,二者均以NULL字符为结束符,编写程序将str2拷贝到str1末尾,形成一个完整字符串例:ORG 100Hstr1db0dh, 0ah, Hello , 0ORG200Hstr2dbAutomation!, 0程序运行后结果应为:str1db0dh, 0ah, Hello Automation!, 08. 以10进制形式显示内存中一有符号字节数据例:vardb0ffH屏幕应显示:The result is: -19. 将一个16位的无符号数var, 转换为非压缩格式BCD码,存放在内存中buf开始的单元中。(按高位在前、低位在后的顺序存放)选作题:10. 内存中从str开始存放一字符串,结束符为NULL字符,请编写程序统计该字符串中单词的个数例:str1db0dh, 0ah, Hello world, welcome to DUT. CPU is central processing unit!, 0h统计.中的单词个数,结果为1011 编写程序用键盘17键,模拟7个音符,进行键盘演奏!注:需要对8253的定时器2和8255的PB口进行初始化习题4答案:1. 从屏幕上输入小写字母,转换为大写字母并输出要求:程序具有可读性、容错性data segment parastr1db0dh, 0ah, Please input(a-z): $str2db0dh, 0ah, The input is error!$str3db0dh, 0ah, The result is: $data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ss:ss_seg, ds:datamain proc farmovax, datamovds, axmain1:leadx, str1;显示提示信息movah, 9int21hmovah, 1;输入小写字母int21hcmpal, a;判断输入字符是否为azjberrorcmpal, zjaerrorjmpnexterror:leadx, str2;显示错误提示信息movah, 9int21hjmpmain1;跳转,重新输入next:subal, 20hpushaxleadx, str3;显示输出提示信息movah, 9int21hpopaxmovdl, al;显示转换后的大写字母movah, 2int21hmovax, 4c00h;返回操作系统int21hmain endpcode endsend main2. 编写一子程序asc2bin,将ASCII转换为二进制数要求:输入参数:AL中存放需要转换的ASCII输出参数:AL中存放转换后的二进制数并返回;功能:将ASCII转换为二进制数;输入参数:AL中存放需要转换的ASCII;输出参数:AL中存放转换后得到的二进制数asc2binprocsubal, 30hcmpal, 9jbeasc2bin_1subal, 7asc2bin_1: retasc2binendp3. 内存中存放8个16位有符号数,求8个数值之和,并将结果存放在内存变量SUM中注:程序中应用到字扩展为双字的指令CWDdata segment parabufdw-1, 30000, 35000, 36000, 37000, 20000, 10000, -2sumdd0data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmovax, datamovds, axleabx, buf;bx指向buf首地址movcx, 8main1:movax, bxcwd;有符号数字扩展为双字addword ptr sum, ax;32位数相加adcword ptr sum + 2, dxincbxincbxloopmain1;循环8次movax, 4c00hint21hmain endpcode endsend main4. 内存中存放8个8位有符号数,请按从大到小顺序排列data segment parabufdb-1, 30, 35, 36, 37, 20, 100, -2data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmovax, datamovds, axmovcx, 8main1:movbx, 0;外循环movdi, 0pushcxmain2:moval, bufbx;内循环cmpal, bufbx+1jgenextxchgal, bufbx+1;不符合规则, 则交换数据movbufbx, almovdi, 1next:incbxloopmain2popcxcmpdi, 0;判断内循环是否发生数据交换jzexitloopmain1 exit:movax, 4c00hint21hmain endpcode endsend main5. 内存中有8个16位数,请编写程序将8个数倒序排放例:定义内存中8个数bufdw100, 3, 1, 20, 40, -2, 7, 10程序运行后,buf开始应为:buf dw 10, 7, -2, 40, 20, 1, 3, 100data segment parabufdw-1, 30000, 35000, 36000, 37000, 20000, 10000, -2data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmovax, datamovds, axmovbx, 0movcx, 8main1:pushbufbxincbxincbxloopmain1;8个数依次入堆栈leabx, bufmovcx, 8main2:popbufbxincbxincbxloopmain2;8个数依次出栈movax, 4c00hint21hmain endpcode endsend main6. 从键盘输入4位十进制数,然后以16进制形式显示在屏幕上.例:键盘输入:1024屏幕上应显示:0400H要求:键盘输入和显示结果时均应有提示data segment parabufdb4 dup(0)vardw0str1db0dh, 0ah, Please input four numbers(0-9): $str2db0dh, 0ah, The input is error, please try again. $str2db0dh, 0ah, The hex result is: $data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmovax, datamovds, axmain1:leadx, str1;显示数据输入提示信息movah, 9int21hmovbx, 0movcx, 4;循环输入4个数main2:movah, 1;DOS功能调用,输入数据int21hcmpal, 0;判断输入字符是否为0-9jberrorcmpal, 9jaerror;若不为0-9,则进行错误处理subal, 30h;ASCII转换为二进制,得到0-9moval, bufbx;存入buf开始的缓冲区incbxloopmain2jmpnext;数据输入正确后,跳转到后续处理error:leadx, str2;显示错误提示信息movah, 9int21hjmpmain1;跳转到重新输入next:movax, 0;(0*10+B3)*10+B2)*10+B1)*10+B0movdx, 0;得到输入的4位十进制数movsi, 10movbx, 0movcx, 4main3:mul10;相乘后dx仍然保持0addal, bufbxadcah, 0incbxloopmain3;循环4次乘10movvar, ax;得到的4位十进制数存放到var中leadx, str3movah, 9int21h;显示输出提示符movch, 4;以16进制显示输入的数据, 循环4次movcl, 4main4:rolvar, cl; 循环左移4位movax, varandax, 000fhcallbin2asc;二进制转换为ASCIIcallpchar;显示16进制decchjnzmain4moval, Hcallpcharmovax, 4c00hint21hmain endp;功能:将一个二进制数转换为ASCII;输入参数:AL中存放要转换的二进制数;输出参数:AL中存放转换后的ASCIIbin2ascprocandal, 0fhaddal, 30hcmpal, 39hjbebin2asc_1addal, 07hbin2asc_1:retbin2ascendp;功能:显示字符;输入参数:AL中存放要显示字符的ASCII;输出参数:无pcharprocmovdl, almovah, 2int21hretpcharendpcode endsend main7. 数据段从100H开始存放字符串str1,从200H开始存放str2,二者均以NULL字符为结束符,编写程序将str2拷贝到str1末尾,形成一个完整字符串例:ORG 100Hstr1db0dh, 0ah, Hello , 0ORG200Hstr2dbAutomation!, 0程序运行后结果应为:str1db0dh, 0ah, Hello Automation!, 0data segment paraORG100Hstr1db0dh, 0ah, Hello , 0ORG200Hstr2dbAutomation!, 0data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmovax, datamovds, axmoves, axleadi, str1;es:di指向str1首地址moval, 0repnzscasb;查找str1结束符NULLdecdi;找到str1结束符,并让es:di指向该位置leasi, str2;ds:si指向str2首地址cld;DF = 0main1:lodsb;AL (ds:si), si = si + 1stosb;(es:di) AL, di = di + 1cmpal, 0;判断是否到str2的结束符jnzmain1leasi, str1;ds:si指向拷贝后的str1首地址main2:lodsb;显示拷贝后的str1字符串cmpal, 0jzexitcallpcharjmpmain2exit:movax, 4c00hint21hmain endp;功能:显示字符;输入参数:AL中存放要显示字符的ASCII;输出参数:无pcharprocmovdl, almovah, 2int21hretpcharendpcode endsend main8. 以10进制形式显示内存中一有符号字节数据例:vardb0ffH屏幕应显示:The result is: -1data segment paravardb7fhstr1db0dh, 0ah, The result is: bufdb4 dup( )db$data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmovax, datamovds, axmovbuf, +cmpvar, 0;判断var是正数,还是负数jgenextmovbuf, -negvar;若var为负,则得到其相反数next:moval, varmovcx, 3movdl, 10leabx, buf+3main1:movah, 0divdl; (AX / 10)商 aladdah, 30h; (AX / 10)余数 ahmovbx, ahdecbxloopmain1;循环3次,分别得到百、十、个位leadx, str1;显示10进制数movah, 9int21hexit:movax, 4c00hint21hmain endpcode endsend main9. 将一个16位的无符号数var, 转换为非压缩格式BCD码,存放在内存中buf开始的单元中。(按高位在前、低位在后的顺序存放)data segment paravardw800Hbufdb5 dup(0)data endsss_seg segment stackdw100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmovax, datamovds, axmovcx, 16;(0*2 + B15)*2 + B14)*2 + + )*2 + B0main1:shlvar, 1;得到var的Bi位leabx, 4pushcxmovcx, 5main2:moval, bufbx;执行buf*2 + Bi操作adcal, alAAA非压缩格式BCD码调整movbufbx, aldecbxloopmain2;内循环为5次popcxloopmain1;外循环为16次exit:movax, 4c00hint21hmain endpcode endsend main选作题:10. 内存中从str开始存放一字符串,结束符为NULL字符,请编写程序统计该字符串中单词的个数例:str1db0dh, 0ah, Hello world, welcome to DUT. CPU is central processing unit!, 0h统计.中的单词个数,结果为1011 编写程序用键盘17键,模拟7个音符,进行键盘演奏!注:需要对8253的定时器2和8255的PB口进行初始化习题5:1. 如图4-1所示,8088 CPU工作在最小模式,通过3片8282与系统地址总线相连,通过1片8286与系统数据总线相连,外扩1片27256(32K8 EPROM)和1片62256(32K8 RAM),要求EPROM起始地址为B0000H,RAM地址范围紧随其后,使用74LS138,采用全地址译码方式。(14分)1)写出27256与62256的地址覆盖范围;(2分)2) 请完成8088最小模式下总线连接图,并画出系统总线与存储器连接图,其中存储器读/MEMR信号和存储器写/MEMW信号,需要由8088 CPU的M/IO、/RD、/WR信号产生,连接时门电路自选。(12分)图4-1 存储器连接G174LS138G2AG2BCBAY0Y1Y2Y3Y4Y5Y6Y7GNDGNDGND+5VWE62256OED7D0D1D2D3D4D5D6CSA6A0A1A2A3A4A5A14A7A8A9A10A11A12A1327256OED7D0D1D2D3D4D5D6CSA6A0A1A2A3A4A5A14A7A8A9A10A11A12A13A7A0DIRB7B0OE8286D7D6D5D4D3D2D1D0A0A1A2A3A4A5A6A78282OEQ7Q0STBD7D0D7D0STBQ7Q0OE8282A15A14A13A12A11A10A9A8D7D0STBQ7Q0OE8282A19A18A17A168088MN/MXWRRDM/IODENDT/RAD7AD0A15A8ALEA19A16BHE习题5及答案:(存储器扩展)1. 如图4-1所示,8088 CPU工作在最小模式,通过3片8282与系统地址总线相连,通过1片8286与系统数据总线相连,外扩1片27256(32K8 EPROM)和1片62256(32K8 RAM),要求EPROM起始地址为B0000H,RAM地址范围紧随其后,使用74LS138,采用全地址译码方式。(14分)1)写出27256与62256的地址覆盖范围;(2分)BHEA19A16ALEA15A8AD7AD0DT/RDENM/IORDWRMN/MX8088D7D0STBQ7Q0OE8282A19A18A17A16D7D0STBQ7Q0OE8282A15A14A13A12A11A10A9A8D7D0STBQ7Q0OE8282A7A6A5A4A3A2A1A0A7A0DIRB7B0OE8286D7D6D5D4D3D2D1D0A13A12A11A10A9A8A7A14A5A4A3A2A1A0A6CSD6D5D4D3D2D1D0D7OE27256A13A12A11A10A9A8A7A14A5A4A3A2A1A0A6CSD6D5D4D3D2D1D0D7OE62256WE+5VGNDGNDGNDG174LS138G2AG2BCBAY0Y1Y2Y3Y4Y5Y6Y7图4-1 存储器连接2) 请完成8088最小模式下总线连接图,并画出系统总线与存储器连接图,其中存储器读/MEMR信号和存储器写/MEMW信号,需要由8088 CPU的M/IO、/RD、/WR信号产生,连接时门电路自选。(12分)1) 27256地址覆盖范围B0000HB7FFFH;62256地址覆盖范围B8000HBFFFFH连接图文字说明如下:2) 总线连接l 8088 MN/MX引脚接+5V;A19A16引脚接第一片8282的D7D0;A15A8引脚连接第二片8282的D7D0;AD7AD0引脚同时连接到第三片8282的D7D0,也连接到8286的A7A0;DT/R引脚连接8286的DIR引脚,/DEN引脚连
展开阅读全文