当前位置:文档之家› 微机原理与接口技术课后答案清华版

微机原理与接口技术课后答案清华版

微机原理、汇编与接口技术(朱定华 编著)第三章习题参考答案一作者:华中科技大学 释梵本参考答案绝大多数经过上机测试,但因作者水平有限,一定尚有缺漏,希望大家批评指正,QQ:564630776,本参考答案将有绪本,不得用于商业用途!The answers below use the macros like this:standardstack macrostack segment stack 'stack'dw 32 dup(0)stack endsendmstandardstart macrobegin proc farassume ss:stack,cs:code,ds:datapush dssub ax,axpush axmov ax,datamov ds,axendm3.1 编写程序实现下列运算(式中W为字变量,B为字节变量,不考虑溢出,除法余数不再参与运算)说实话,不考虑溢出,令我很费解,这样的得数还有意义吗?但是回头一想,单从作作业的角度来看倒是省了不少脑子,呵呵,那我就不考虑了。

(1) W1+W2+28-W3->W4if1include MACRO.LIBendifstandardstackdatasegmentW1dw 12W2dw 34W3dw 21W4dw 0code segmentstandardstartmov ax,W1add ax,W2add ax,28sub ax,W3mov W4,axretbegin endpcode endsend begin(2)(W1-W2)/10->W3...W4 if1include MACRO.LIB endifstandardstackdatasegmentW1dw 12W2dw 34W3dw 0W4dw 0dataendscode segmentstandardstartmov ax,W1sub ax,W2mov dl,10idiv dlmov bl,almov bh,0mov cl,ahmov ch,0mov W3,bxmov W4,cxretbegin endpcode endsend begin(3)(B1*B2)/(B3+6)->B4...B5 if1include MACRO.LIB endifstandardstackdatasegmentB1db 1B3db 3B4db 0B5db 0dataendscode segmentstandardstartmov al,B1imul B2mov bl,B3add bl,6idiv blmov B4,almov B5,ahretbegin endpcode endsend begin(4)((B1+B2-B3)/B4*B5)/2->W if1include MACRO.LIB endifstandardstackdatasegmentB1db 5B2db 4B3db 3B4db 2B5db 1W dw 0dataendscode segmentstandardstartmov bl,B1add bl,B2sub bl,B3mov al,B4mul B5xchg bx,axidiv bxmov cl,2idiv clmov byte ptr W,alretbegin endpcode ends3.2 编写程序段实现下列BCD数运算(式中字节变量B和AB分别为压缩BCD数和非压缩BCD数,字节变量W为压缩BCD数)(1)B1+B2-(B3-B4)->B5if1include MACRO.LIBendifstandardstackdatasegmentB1db 19HB2db 38HB3db 44HB4db 15HB5db 00Hdataendscode segmentstandardstartmov al,B1add al,B2DAAadd al,B4DAAsub al,B3DASmov B5,alretbegin endpcode endsend begin(2)W1+W2->W3if1include MACRO.LIBendifstandardstackdatasegmentW1dw 4455HW2dw 6677HW3dw 0000Hdataendscode segmentstandardstartmov al,byte ptr[W1]add al,byte ptr[W2]DAAmov byte ptr[W3],almov al,byte ptr[W1+1]DAAadd al,byte ptr[W2+1]DAAmov byte ptr[W3+1],al;here we ignore the highest cf according to the subject retbegin endpcode endsend begin(3)AB1*AB2/AB3->AB4if1include MACRO.LIBendifstandardstackdatasegmentAB1db 07HAB2db 08HAB3db 09HAB4db 00Hdataendscode segmentstandardstartmov ah,0mov al,AB1AADmov bl,almov al,AB2AADmul blmov cx,axmov ah,0mov al,AB3AADmov dl,almov ax,cxdiv dlAAMmov AB4,alretbegin endpcode endsend beginif1include MACRO.LIBendifstandardstackdatasegmentAB1db 07HAB2db 08HB db 00Hdataendscode segmentstandardstartmov ah,0mov al,AB1AADmov cl,10mul clpush axmov al,AB2AADmov bx,axpop axadd ax,bxAAMmov cl,4shl ah,clor al,ahmov B,alretbegin endpcode endsend begin3.3 写出执行下列程序段的中间结果和结果(1)0048 0702(2)00590411010704(3)01010107(4)这里的mov dl,10 因为我理解题意为十进制数10005A09000908(5)62(6)02483.4 编写程序,将字节变量BVAR中的压缩BCD数转换为二进制数,并存入原变量中。

if1include MACRO.LIBendifstandardstackdatasegmentbvar db 78Hdataendscode segmentstandardstartmov al,bvarmov ah,almov cl,4shr ah,cland al,0FHaadmov bvar,alretbegin endpcode endsend begin3.5 编写程序,求字节变量W1和W2中的非压缩BCD数之差(W1-W2、W1>=W2),将差存到字节变量B3中。

if1include MACRO.LIBendifstandardstackdatasegmentW1dw 0708HW2dw 0504HB3db 00Hdataendscode segmentstandardstartmov ax,W1mov cl,4shl ah,clor al,ahmov bl,almov ax,W2shl ah,clor al,ahxchg al,blsub al,bldasmov B3,alretcode endsend begin3.6 编写求两个4位非压缩BCD数之和,将和送显示器显示的程序。

if1include MACRO.LIBendifstandardstackdatasegmentW1db 0,4,0,5,0,6,0,7W2db 0,1,0,2,0,3,0,9result db 5 dup(0),'$'dataendscode segmentstandardstartmov cx,4mov ax,0mov si,7mov di,4bitand:add al,byte ptr W1[si]aaaadd al,byte ptr W2[si]aaaadd al,30Hmov result[di],alsub si,2dec dimov al,ahmov ah,0loop bitandadd al,30Hmov result[di],almov dx,offset resultcmp result[0],30Hjne showinc dxshow:mov ah,9int 21Hretbegin endpcode endsend begin3.7 编写求两个4位压缩BCD数之和,将和送显示器显示的程序。

if1endifstandardstackdatasegmentW1db 56H,18HW2db 97H,42Hresult db 5 dup(0),'$'dataendscode segmentstandardstartmov al,byte ptr W1[1]add al,byte ptr W2[1]daamov ah,aland ah,0F0Hmov cl,4shr ah,cland al,0FHadd al,30Hadd ah,30Hmov result[4],almov result[3],ahmov ax,0adc al,byte ptr W1add al,byte ptr W2daajnc omitmov result,31Homit:mov ah,aland ah,0F0Hmov cl,4shr ah,cland al,0FHadd al,30Hadd ah,30Hmov result[2],almov result[1],ahmov al,resultsub al,31Hjz showmov dx,offset result+1mov ah,9int 21Hretshow:mov dx,offset result mov ah,9int 21Hretbegin endpcode endsend begin注:不知道是我的版本不对,还是MS做的东西就是这个样子的。

在我的masm中指令je不能够正确地汇编,会被翻译成jz,所以我无奈地选用了jz,希望同学们注意,不要跟我走一样的弯路。

而且这种问题不仅存在与这一个指令哦!我还碰到一个,但是什么让我忘记了。

相关主题