关闭

关闭

封号提示

内容

首页 微机原理及应用_黄冰_覃伟年_黄知超_著_课后答案.pdf

微机原理及应用_黄冰_覃伟年_黄知超_著_课后答案.pdf

微机原理及应用_黄冰_覃伟年_黄知超_著_课后答案.pdf

上传者: 过客wander 2013-10-11 评分 4.5 0 75 10 343 暂无简介 简介 举报

简介:本文档为《微机原理及应用_黄冰_覃伟年_黄知超_著_课后答案pdf》,可适用于高等教育领域,主题内容包含章绪论用位二进制码写出下列十进制数的原码和补码表示解释:原码:最高位为符号位正数符号位为负数符号位为。补码:正数的补码与原码相同负数的补码:由其原码符等。

章绪论用位二进制码写出下列十进制数的原码和补码表示解释:原码:最高位为符号位正数符号位为负数符号位为。补码:正数的补码与原码相同负数的补码:由其原码除符号位保持不变外其余各位按位取反末位加而成。解:()原=B注:=补=原=B注:正数补码与原码相同()原=B注:=补=原=B注:正数补码与原码相同()原=B注:=补=BB=B注:除符号位外按位取反末位加()原=B注:=补=BB=B注:除符号位外按位取反末位加用位二进制码写出下列十进制数的原码和补码表示。()原=B注:=补=原=B注:正数补码与原码相同()原=B注:=补=BB=B注:除符号位外按位取反末位加()原=B注:=补=B注:正数补码与原码相同()原=B注:=补=BB=B注:除符号位外按位取反末位加写出下列用补码表示的二进制数的真值。解释:正数的补码=原码负数的补码:再次求补码得到其原码解:()正数的补码真值:=()正数的补码真值:=()负数的补码真值:BB=B=()负数的补码真值:BB=B=第章Intel微处理器在存储器中存放的数据如图所示。试读出H和H字节单元的内容是什么?读出H和H字单元的内容是什么?解:H字节单元的内容:CHH字节单元的内容:DHH字单元的内容:CHH字单元的内容:EDH段地址和偏移地址为H:AH的存储单元的物理地址是什么?而H:EAH或H:FAH的存储单元的物理地址又是什么?这说明了什么问题?解释:物理地址=段地址H偏移地址解:H:AH存储单元的物理地址HHAH=AHH:EAH存储单元的物理地址HHEAH=AHH:FAH存储单元的物理地址HHFAH=AH说明:不同的段地址不同的偏移地址可以指向同一个物理地址即各个逻辑段可以相互重叠。在存储器分段结构中每个段区最大可占用多少地址范围为什么?如果在的机器中若段间不允许重叠那么最多可分多少个段区?解:若为微处理器每个段区最大可占用KB因为所有内部寄存器都只有位。若每段KB最多可分个段区因为微处理器有条地址线可访问存储器的最大容量为MB。如果从存储器的H地址开始分配段区要求数据段占用KB范围堆栈段占用B范围代码段占用KB范围。按数据段、堆栈段和代码段的顺序连续存放试画出存储器分段地址分配示意图图中应写明各段寄存器的内容?解:HKBDS:HBSS:HHKBCS:H注:存储器MHHHHHCHHHHDHHEHKB:B~BSS:起始物理地址HKB=HH=HB:B~BCS:起始物理地址HB=HH=H指出下列指令的源和目标操作数的寻址方式:题号指令目的操作数的寻址方式源操作数的寻址方式()MOVARRAY,BX直接寻址寄存器寻址()ADCCX,ALPHABXSI寄存器寻址带位移的基址变址寻址()ANDGAMMADI,B带位移的变址寻址立即寻址()INCBL寄存器寻址()TESTES:SI,DX寄存器间接寻址寄存器寻址()SBBSI,BP寄存器寻址寄存器间接寻址现有DS=HBX=HSI=H(H)=H(H)=H(H)=H(H)=H(H)=AH(H)=CH(H)=BH(H)=H试说明下列各指令执行完后AX寄存器的内容。题号指令AX寄存器的内容简单解释()MOVAX,HH立即数赋给AX()MOVAX,BXH寄存器BX值赋给AX()MOVAX,HCAHPA=DSH=H()MOVAX,BXHPA=DSBX=H()MOVAX,HBXCAHPA=DSBXH=H()MOVAX,BXSIHPA=DSBXSI=H()MOVAX,HBXSIBHPA=DSBXSIH=H假定DS=HES=HSS=HSI=AHBX=HBP=H数据段中变量名VAL的偏移地址值为H试指出下面源操作数字段的寻址方式是什么?其物理地址值是多少?题号指令源操作数的寻址方式源操作数的物理地址()MOVAX,ABH立即寻址在代码段中与CS、IP有关()MOVAX,BX寄存器寻址在寄存器中()MOVAX,H直接寻址DSH=H()MOVAX,BX寄存器间接寻址DSBX=H()MOVAX,BP寄存器间接寻址SSBP=H()MOVAX,BX带位移的基址寻址DSBX=AH()MOVAX,BXSI基址变址寻址DSBXSI=AH()MOVAX,VAL直接寻址DSVAL=H()MOVAX,ES:BX寄存器间接寻址ESBX=H()MOVAX,SI寄存器间接寻址DSSI=AH()MOVAX,VALBX带位移的基址寻址DSBXVAL=H()MOVAX,VALBXSI带位移的基址变址寻址DSBXSIVAL=FH设AX=HBX=HCX=HSP=H试分析下列程序段执行后AX、BX、CX、SP中的内容各为多少?并画出堆栈变化示意图。解:第条指令AX=HPUSHAXBX=HSPHCX=HHSP=FFEH第条指令PUSHBXSPHAX=HHBX=HHCX=HHSP=FFCH第条指令PUSHCXSPHHHAX=HHBX=HHCX=HHSP=FFAH第条指令POPAXSPHAX=HHBX=HHCX=HHSP=FFCH第条指令AX=HPOPCXBX=HSPHCX=HHSP=FFEH下列程序段中每一条指令执行完后AX中的十六位进制内容是什么?指令AX中的内容指令MOVAX,AX=HDECAXAX=FFFFHADDAX,FFFFHAX=FFEHADDAX,AX=HNOTAXAX=FFFHSUBAX,FFFFHAX=HADDAX,HAX=HORAX,BFDFHAX=BFDFHANDAX,EBEDHAX=ABCDHXCHGAH,ALAX=CDABHSALAX,AX=BH(CF=,PF=)算术左移RCLAX,AX=ADH(CF=,PF=,OF=)带进位循环左移循环移位指令不影响除CF和OF以外的其他条件标志。移位指令根据移位后的结果设置SF、ZF和PF位AF位则无定义。RCL:OF=最高有效位的值发生变化PF保留原来的值将十六进制数AH与下列各个数相加试给出和数及标志位AFSFZFCFOF和PF的状态。()DH和数:HAF=,SF=,ZF=,CF=,OF=,PF=()H和数:ACHAF=,SF=,ZF=,CF=,OF=,PF=从下列各个数中减去AEH试给出差值及标志位AFSFZFCFOF和PF的状态。()H()H解:HCHAEHAF=SF=ZF=CF=OF=PF=HBHAEHAF=SF=ZF=CF=OF=PF=假设BX=EH字变量VALUE中存放的内容为H确定下列各条指令单独执行后的结果。题号指令BX寄存器的内容简单解释()XORBX,VALUEAHXOR()ANDBX,VALUEHAND()ORBX,VALUEFBHOR()XORBX,FFHCHXOR()ANDBX,H()TESTBX,HEHTEST指令只影响标志位不影响结果()XOROSZAPC:XXUXSF=ZF=PF=()ANDOSZAPC:XXUXSF=ZF=PF=()OROSZAPC:XXUXSF=ZF=PF=()XOROSZAPC:XXUXSF=ZF=PF=()ANDOSZAPC:XXUXSF=ZF=PF=()TESTOSZAPC:XXUXSF=ZF=PF=试写出执行下列指令序列后BX寄存器的内容。执行前BX=DH。MOVCL,SHRBX,CL解:BX=DH=B执行后:B=DAH假定DX=BHCL=CF=确定下列各条指令单独执行后DX中的值。题号指令DX寄存器的内容简单解释()SHRDX,CHBH=B逻辑右移()SARDX,CLHBH=B算术右移()SHLDX,CLCHBH=B逻辑左移()SHLDL,HBH=B逻辑左移()RORDX,CLHBH=B循环右移()ROLDL,CLCDHBH=B循环左移()SALDH,BHDH=算术左移()RCLDX,CLCCHBH=B带进位循环左移()RCRDL,DCHBH=B带进位循环右移第章宏汇编语言程序设计对于下面的数据定义各条指令单独执行后有关寄存器的内容是什么?FLDBDBTABLEADWDUP()TABLEBDB'ABCD'()MOVAX,TYPEFLDBAX=H字节类型()MOVAX,TYPETABLEAAX=H字类型()MOVCX,LENGTHTABLEACX=HDUP定义的变量分配的单元数()MOVDX,SIZETABLEADX=HSIZE=LENGTH*TYPE()MOVCX,LENGTHTABLEBCX=H非DUP定义的变量LENGTH=试写出完成下列操作的伪指令语句:()将H,,BH,存放在定义为字节变量ARRAY的存储单元中。ARRAYDBH,,BH,()将字数据H,H,,AH存放在定义为字变量DATA的存储单元中。DATADWH,H,,AH()将字节数据H,CH,H,H存放在字变量ALPHA的存储单元中并且不改变数据按字节存储的次序。ALPHADWCH,H()在BETA为首址的存储单元中连续存放字节数据个个'A'个(,)个空单元。BETADBDUP(),DUP('A'),DUP(,),DUP()()在STRING为首址的存储单元中存放字符串'THISISAEXAMPE'。STRINGDB'THISISAEXAMPE'()用符号COUNT替代。COUNTEQU(或COUNT=)画图表示下列语句中数据在存储器中的存储情况。()BYTEVARDB'ABCD',,H,DUP(),DUP(,)()WORDVARDWDUP(,),,'AB','CD',。()从左到右、从上到下为地址增大的方向。HHHHCHHHHHH()从左到右、从上到下为地址增大的方向。DF设置一个数据段DATASEG其中连续存放下列的个变量用段定义语句和变量定义语句写出数据段:()DATA为字符串变量:'DATASEGMENT'()DATA为十进制数字字节变量:,,()DATA为十六进制数字字节变量:,,,()DATA为个零的字节变量()DATA为数字的ASCII字符字节变量:()DATA为十进制数的字变量:,,,()DATA为十六进制数的字变量:,()DATA为本段中字变量和字节变量之间的字节单元数之差。解:DATASEGMENTDATADB'DATASEGMENT'DATADB,,DATADBDH,H,H,HDATADBDUP()DATADB''DATADW,,,DATADWH,AHDATADB$DATA(DATADATA)DATAENDS假设程序中的变量定义如下:BUFDBDUP('A')BUFDWH,,CHBUFDBDUP()BUFDB,,,,()用一条指令将BUF的偏移地址送入BX。MOVBX,OFFSETBUF或LEABX,BUF()将BUF的第三字节数据送入CL。MOVCL,BUF()将AH送入BUF的第十个字节单元中。MOVBUF,AH()用伪指令写出BUF和BUF二者的总长度(字节数)COUNTEQUBUFBUF给出等值语句如下:ALPHAEQUBETAEQUGAMMAEQU求下列表达式的值:()ALPHA*BETAD=H()ALPHAMODGAMMABETAMOD=D=H()(ALPHA)*BETAALPHA()*–=D=H()(BETA)MOD()MOD=H()BETAANDAND=H()GAMMAOROR=H下列语句中在存储器中每个变量分配到多少字节?VRDW字节VRDWDUP(),*=字节VREQU字节VRDDVRDUP()*=字节VRDBDUP(,VRDUP(,))*(*)=字节VRDB'HOWAREYOU'字节试写出一个完整的数据段DATASEG首先把个压缩的BCD码存放在ARRAY变量字节单元中紧接着把,,,,存放在ALPHA数组变量的字单元中接着留个空单元作为工作单元用它定义为字节变量BUFFER。DATASEGSEGMENTARRAYDBDUP(H)ALPHADW,,,,BUFFERDBDUP()DATASEGENDS将存放在字节变量BCD中的两个十进制数的ASCII码合并为一字节压缩型BCD码存入字节变量BCD试编写程序。DATASEGMENTBCDDB''BCDDBDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,BCDMOVCL,SALAL,CLMOVBL,BCDANDBL,FHORAL,BLMOVBCD,ALMOVAH,CHINTHCODEENDSENDSTART分析下列程序段并说明完成什么操作。ADDNUMDBH,H,H,HADDSUMDBDUP()MOVAL,ADDNUMADDNUM第个数据送到ALADDAL,ADDNUMADDNUM第个数据加到ALDAA加法的十进制调整指令MOVADDSUM,ALADDNUM第、个数据的和放到ADDSUMMOVAL,ADDNUMADDNUM第个数据送到ALADCAL,ADDNUMADDNUM第个数据加到ALDAA加法的十进制调整指令MOVADDSUM,ALADDNUM第、个数据的和放到ADDSUM解:将ADDNUM的第、个数据相加并将结果进行十进制调整转换为压缩型BCD码并放到ADDSUM的第个字节的位置将ADDNUM的第、个数据相加并将结果进行十进制调整转换为压缩型BCD码并放到ADDSUM的第个字节的位置。即:+结果调整为压缩型BCD码结果以字变量形式放到ADDSUM单元。写出完成下述功能的程序段:()将H存入CH中。()将CH中的内容与AH相加。()将CH中的内容乘。()将CH中的内容存入以BX作为相对基址寻址的数组变量NUM的第十个字节单元中(数据段)。问:各程序段分别执行后CH中的内容是多少?MOVCH,H()CH=HADDCH,AH()CH=CHMOVAL,HMULCH()CH=CH,AX=BHMOVBXNUM,CH()CH=CH编写程序计算Z=((W–X)*Y)r为相除所得余数。其中W,X,Y均为位有符号二进制数。DATASEGMENTWDBXDBYDBZDWDUP()rdbDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,WSUBAL,XWX>ALCBWMOVBL,IDIVBL(WX)>ALMOVr,AH(WX)>rMOVBL,YIMULBL(WX)*Y>AXMOVBX,AXIMULBX((WX)*Y)^>DX,AXMOVZ,AXMOVZ,DX((WX)*Y)^>ZMOVAH,CHINTHCODEENDSENDSTART在数组字变量ARRAY中有个数据将数组中的第个字数据求补再放回原处画出程序流程图和编写程序。用重复前缀串比较指令比较两个字符串一个是在数据段的字符串变量STR(内容为'THISISADOG')另一个是在附加段的字符串变量STR(内容为'THISISACOCK')。当比较到第一个不相同的字符时停止比较把相同部分字符串长度存入数据段的字节变量NUM中。写出分段结构的程序段应包括段定义伪指令和指令序列。问:相同部分字符串长度为多少?在STR和STR第一个不同处的偏移地址是多少?DATASEGMENTSTRDB'THISISADOG'LENDB$STRNUMDBDATAENDSEDATASEGMENTSTRDB'THISISACOCK'LENDB$STREDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:EDATASTART:MOVAX,DATAMOVDS,AXMOVAX,EDATAMOVES,AXCLD串操作由低地址向高地址MOVCH,MOVAL,LENCMPAL,ES:LENJBBLMOVCL,ES:LENJMPCMPOKBL:MOVCL,ALCMPOK:LEASI,STRLEADI,ES:STRREPECMPSBMOVAX,SIDECAL不同处的字节偏移地址MOVNUM,AL不同处的字节偏移地址放到NUMMOVAH,CHINTHCODEENDSENDSTART答:相同长度不同处的偏移地址有两个压缩型BCD码相加被加数()和加数()存放在数据段的BUFFER变量的个连续的字节存储单元中结果(和)存放在RESUT变量的三个字单元中(考虑到有进位的情况)编制具有数据段和代码段结构的完整程序程序中需要作必要的注释。注:结果存放在RESUT字节变量中三个字单元不知要求怎么用DATASEGMENTBUFFERDBH,H,H,HRESUTDBDUP()DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,BUFFER第一个数据低两位>ALMOVBL,BUFFER第二个数据低两位>BLADDAL,BL低两位相加DAA十进制调整MOVDL,AL低两位相加结果放到DLMOVAL,BUFFER第一个数据高两位>ALMOVBL,BUFFER第二个数据高两位>BLADCAL,BL低两位相加DAA十进制调整MOVBL,JNCHCFINCBLHCF:MOVRESUT,BL存放最高位MOVRESUT,AL存放中间两位MOVRESUT,DL存放最低两位MOVAH,CHINTHCODEENDSENDSTART将SRCBUF变量定义的个字符串传送到DSTBUF变量定义的存储区去。当遇到DH时不将此字符传送到DSTBUF变量中去。试编写程序并加以注释。DATASEGMENTSRCBUFDB'aaa',DH,'bbb'DSTBUFDBDUP()DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,比较次数>CXMOVSI,源串指针>SIMOVDI,目标串指针>DISDCMP:MOVAL,SRCBUFSICMPAL,DHJZNSENDMOVDSTBUFDI,AL不等于DH保存数据修改SI、DIINCDINSEND:INCSI等于DH不保存数据修改SILOOPSDCMPMOVAH,CHINTHCODEENDSENDSTART已知有n个元素存放在以BUF为首址的字节存储区中试统计其中负元素的个数画出程序框图编写程序。DATASEGMENTBUFDBH,H,FH,H,HLENEQU$BUFDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,LEN比较次数>CXMOVSI,字节存储区指针MOVDL,负元素个数初始化NEGCMP:MOVAL,BUFSICMPAL,JNLCGEINCDL小于个数加指针加CGE:INCSI不小于指针加LOOPNEGCMPMOVAH,CHINTHCODEENDSENDSTART已知以BUF为首址的字存储区中存放着n个有符号的二进制数试编写程序将大于等于的数送以BUF为首址的字存储区中将小于的数送以BUF为首址的字存储区中并画出程序框图。DATASEGMENTBUFDWH,FFH,H,H,H,HLENEQU($BUF)BUFDWLENDUP()BUFDWLENDUP()DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,LEN循环次数即BUF的单元数MOVBX,BUF指针初始化MOVSI,BUF指针初始化MOVDI,BUF指针初始化CLOOP:MOVAX,BXBUF数据>AXCMPAX,JGETOMOVBUFDI,AXAX<AX>BUFDI>DIBX>BXINCDIINCDIJMPCONTINUETO:MOVBUFSI,AXAX>=AX>BUFSI>SIBX>BXINCSIINCSICONTINUE:INCBXINCBXLOOPCLOOPMOVAH,CHINTHCODEENDSENDSTART已知在以BUF为首地址的字节存储区中存放着一个以′$′作结束标志的字符串试编写程序在CRT上显示该字符串并要求将小写字母以大写字母形式显示出来。画出程序框图。DATASEGMENTBUFDB'abCDalskdjf$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,BUF地址指针ALOOP:MOVDL,BUFSIBUF数据>DLCMPDL,'$'DL='$',EXITJESTOPCMPDL,AHJBEUPPER大写字母打印输出地址指针SI加SUBDL,H小写字母DL减H后打印输出地址指针SI加UPPER:MOVAH,HINTHINCSIJMPALOOPSTOP:MOVAH,CHINTHCODEENDSENDSTART设有三个字节变量X、Y、Z试找出X、Y有符号数中较大者送入Z中编写程序。推荐检测实例:和DATASEGMENTXDBFHYDBHZDBDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XX>ALCMPAL,YXYJGENEXTX>=Y,X>ZMOVAL,YX<Y,Y>ZNEXT:MOVZ,ALMOVAH,CHINTHCODEENDSENDSTART设在变量单元A、B和C中存放有三个数若三个数都不为则求出三个数之和存入D中若有一个为则将其他两个单元也清零编写程序。DATASEGMENTADBFHBDBHCDBHDDWDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXCMPA,JZSTOPCMPB,JZSTOPCMPC,JZSTOP有一个为全部置MOVAH,否则作加法运算放到D注意加法运算结果为字MOVBH,MOVAL,AMOVBL,BADDAX,BXMOVBL,CADDAX,BXMOVD,AXJMPSTOPNEXT:MOVA,MOVB,MOVC,STOP:MOVAH,CHINTHCODEENDSENDSTART试分析下列程序段说明完成了什么操作?程序执行前后HEXNUM字节单元的内容是什么?ASCNUMDBHHEXNUMDB?MOVAHASCNUMCMPAHHJBENEXTSUBAHNEXT:SUBAHHMOVHEXNUMAXHLT解:''~''与'A'~'F'组成的一位十六进制数的ASCII码转换为一位十六进制数。程序执行前:HEXNUM=程序执行后:HEXNUM=AH

精彩专题

职业精品

上传我的资料

热门资料

资料评价:

/ 48
所需积分:0 立即下载

意见
反馈

返回
顶部

Q