汇编语言第七章答案.doc

上传人:s****u 文档编号:12783930 上传时间:2020-05-24 格式:DOC 页数:9 大小:46.50KB
返回 下载 相关 举报
汇编语言第七章答案.doc_第1页
第1页 / 共9页
汇编语言第七章答案.doc_第2页
第2页 / 共9页
汇编语言第七章答案.doc_第3页
第3页 / 共9页
点击查看更多>>
资源描述
7.1 编写一条宏指令CLRB,完成用空格符将一字符区中的字符取代的工作。字符区首地址及其长度为变元。答:宏定义如下:CLRB MACRO N, CFILMOV CX, NCLDMOV AL, ;取空格符的ASCII码LEA DI, CFILREP STOSBENDM7.2 某工厂计算周工资的方法是每小时的工资率RATE乘以工作时间HOUR,另外每工作满10小时加奖金3元,工资总数存放在WAG中。请将周工资的计算编写成一条宏指令WAGES,并展开宏调用:WAGES R1, 42, SUM答:宏定义如下:WAGES MACRO RATE, HOUR, WAGMOV AL, HOUR ;计算周工资(WAG),公式为:HOUR* RATEMOV BL, RATEMUL BLMOV WAG, AXMOV AL, HOUR ;计算奖金存入(AX),公式为:HOUR/10的商*3MOV AH, 0MOV BL, 10DIV BLMOV BL, 3MUL BLADD WAG, AX ;计算周工资总数ENDM宏调用:WAGES R1, 42, SUM宏展开:1 MOV AL, 421 MOV BL, R11 MUL BL1 MOV SUM, AX1 MOV AL, 421 MOV AH, 01 MOV BL, 101 DIV BL1 MOV BL, 31 MUL BL1 ADD SUM, AX7.3 给定宏定义如下:(注意:此宏指令的功能是V3|V1-V2|)DIF MACRO X, YMOV AX, XSUB AX, YENDMABSDIF MACRO V1, V2, V3LOCAL CONTPUSH AXDIF V1, V2CMP AX, 0JGE CONTNEG AXCONT: MOV V3, AXPOP AXENDM试展开以下调用,并判定调用是否有效。(1) ABSDIF P1, P2, DISTANCE(2) ABSDIF BX, SI, XDI, CX(3) ABSDIF BXSI, XBXSI, 240H(4) ABSDIF AX, AX, AX答:(1) 宏调用 ABSDIF P1, P2, DISTANCE 的宏展开如下:此宏调用有效。1 PUSH AX1 DIF P1, P21 MOV AX, P11 SUB AX, P21 CMP AX, 01 JGE ?00001 NEG AX1 ?0000: MOV DISTANCE, AX1 POP AX(2) 宏调用 ABSDIF BX, SI, XDI, CX 的宏展开如下:此宏调用有效。1 PUSH AX1 DIF BX, SI1 MOV AX, BX1 SUB AX, SI1 CMP AX, 01 JGE ?00011 NEG AX1 ?0001: MOV XDI, AX1 POP AX(3) 宏调用 ABSDIF BXSI, XBXSI, 240H 的宏展开如下:此宏调用无效。1 PUSH AX1 DIF BXSI, XBXSI1 MOV AX, BXSI1 SUB AX, XBXSI1 CMP AX, 01 JGE ?00021 NEG AX1 ?0002: MOV 240H, AX1 POP AX(4) 宏调用 ABSDIF AX, AX, AX 的宏展开如下:此宏调用有效但无多大意义。1 PUSH AX1 DIF AX, AX1 MOV AX, AX1 SUB AX, AX1 CMP AX, 01 JGE ?00031 NEG AX1 ?0003: MOV AX, AX1 POP AX7.4 试编制宏定义,要求把存储器中的一个用EOT(ASCII码04H)字符结尾的字符串传送到另一个存储区去。答:宏定义如下:SEND MACRO SCHARS, DCHARSLOCAL NEXT, EXITPUSH AXPUSH SIMOV SI, 0NEXT: MOV AL, SCHARSSIMOV DCHARSSI, ALCMP AL, 04H ;是EOT字符吗?JZ EXITINC SIJMP NEXTEXIT: POP SIPOP AXENDM7.5 宏指令BIN_SUB完成多个字节数据连减的功能:RESULT(A-B-C-D-)要相减的字节数据顺序存放在首地址为OPERAND的数据区中,减数的个数存放在COUNT单元中,最后结果存入RESULT单元。请编写此宏指令。答:宏定义如下:BIN_SUB MACRO RESULT, A, OPERAND, COUNTLOCAL NEXT_SUBPUSH CXPUSH BXPUSH AXMOV CX, COUNTMOV AL, ALEA BX, OPERANDCLCNEXT_SUB: SBB AL, BXINC BXLOOP NEXT_SUBMOV RESULT, ALPOP AXPOP BXPOP CXENDM7.6 请用宏指令定义一个可显示字符串GOOD: GOOD STUDENTS: CLASSX NAME,其中X和NAME在宏调用时给出。答:宏定义如下:DISP_GOOD MACRO X, NAMEGOOD DB GOOD STUDENTS: CLASS&X &NAME, 0DH, 0AH, $ENDM7.7 下面的宏指令CNT和INC1完成相继字存储。CNT MACRO A, BA&B DW ?ENDMINC1 MACRO A, BCNT A, %BB=B+1ENDM请展开下列宏调用:C=0INC1 DATA, CINC1 DATA, C答:宏展开如下:C=0INC1 DATA, C1 DATA0 DW ?INC1 DATA, C1 DATA0 DW ? (注意:C为0没有变)7.8 定义宏指令并展开宏调用。宏指令JOE把一串信息MESSAGE NO. K存入数据存储区XK中。宏调用为:I=0JOE TEXT, IJOE TEXT, IJOE TEXT, I答:宏定义如下:MARY MACRO X, KX&K DB MESSAGE NO. &KENDMJOE MACRO A, IMARY A, %II=I+1ENDM宏调用和宏展开:I=0JOE TEXT, I1 TEXT0 DB MESSAGE NO. 0JOE TEXT, I1 TEXT1 DB MESSAGE NO. 1JOE TEXT, I1 TEXT2 DB MESSAGE NO. 27.9 宏指令STORE定义如下:STORE MACRO X, NMOV X+I, II=I+1IF I-NSTORE X, NENDIFENDM试展开下列宏调用:I=0STORE TAB, 7答:宏展开如下:I=0STORE TAB, 71 MOV TAB+0, 01 MOV TAB+1, 11 MOV TAB+2, 21 MOV TAB+3, 31 MOV TAB+4, 41 MOV TAB+5, 51 MOV TAB+6, 67.10 试编写非递归的宏指令,使其完成的工作与7.9题的STORE相同。答:宏定义如下:STORE MACRO KMOV TAB+K, KENDM宏调用:I=0REPT 7STORE %II=I+1ENDM7.11 试编写一段程序完成以下功能,如给定名为X的字符串长度大于5时,下列指令将汇编10次。ADD AX, AX答:程序段如下:X DB ABCDEFGIF ($-X) GT 5REPT 10ADD AX, AXENDMENDIF7.12 定义宏指令FINSUM:比较两个数X和Y(X、Y为数,而不是地址),若XY则执行SUMX+2*Y;否则执行SUM2*X+Y。答:宏定义如下:CALCULATE MACRO A, B, RESULT ;计算RESULT2*A+BMOV AX, ASHL AX, 1ADD AX, BMOV RESULT, AXENDMFINSUM MACRO X, Y, SUMIF X GT YCALCULATE Y, X, SUMELSECALCULATE X, Y, SUMENDIFENDM7.13 试编写一段程序完成以下功能:如变元X=VT55,则汇编MOV TERMINAL, 0;否则汇编MOV TERMINAL, 1。答:宏定义如下:BRANCH MACRO XIFIDN , MOV TERMINAL, 0ELSEMOV TERMINAL, 1ENDIFENDM7.14 对于DOS功能调用,所有的功能调用都需要在AH寄存器中存放功能码,而其中有一些功能需要在DX中放一个值。试定义宏指令DOS21,要求只有在程序中定义了缓冲区时,汇编为:MOV AH, DOSFUNCMOV DX, OFFSET BUFFINT 21H否则,无MOV DX, OFFSET BUFF指令。并展开以下宏调用:DOS21 01DOS21 0AH, IPFIELD答:宏定义如下:DOS21 MACRO DOSFUNC, BUFFMOV AH, DOSFUNCIFDEF BUFFMOV DX, OFFSET BUFFENDIFINT 21HENDM宏展开:DOS21 011 MOV AH, 011 INT 21HDOS21 0AH, IPFIELD1 MOV AH, 0AH1 MOV DX, OFFSET IPFIELD1 INT 21H7.15 编写一段程序,使汇编程序根据SIGN中的内容分别产生不同的指令。如果(SIGN)=0,则用字节变量DIVD中的无符号数除以字节变量SCALE;如果(SIGN)=1,则用字节变量DIVD中的带符号数除以字节变量SCALE,结果都存放在字节变量RESULT中。答:程序段如下:MOV AL, DIVDIF SIGNMOV AH, 0DIV SCALEELSECBWIDIV SCALEENDIFMOV RESULT, AL7.16 试编写宏定义SUMMING,要求求出双字数组中所有元素之和,并把结果保存下来。该宏定义的哑元应为数组首址ARRAY,数组长度COUNT和结果存放单元RESULT。答:宏定义如下:SUMMING MACRO ARRAY,COUNT,RESULTLOCAL ADDITIONMOV ESI, 0MOV ECX, COUNTADDITION: MOV EAX, ARRAYESI*4 ;双字为4字节ADD RESULT, EAXADC RESULT+4, 0 ;将进位加到结果的高位双字中INC ESILOOP ADDITIONENDM7.17 为下列数据段中的数组编制一程序,调用题7.16的宏定义SUMMING,求出该数组中各元素之和。DATA DD 101246,274365,843250,475536SUM DQ ?答:程序如下:SUMMING MACRO ARRAY,COUNT,RESULTLOCAL ADDITIONMOV ESI, 0MOV ECX, COUNTADDITION: MOV EAX, ARRAYESI*4 ;双字为4字节ADD RESULT, EAXADC RESULT+4, 0 ;将进位加到结果的高位双字中INC ESILOOP ADDITIONENDM.MODEL SMALL.386.DATADATA DD 101246,274365,843250,475536SUM DQ ?.CODESTART: MOV AX, DATAMOV DS, AXSUMMING DATA, 4, SUMMOV AX, 4C00HINT 21HEND START7.18 如把题7.16中的宏定义存放在一个宏库中,则题7.17的程序应如何修改?答:程序修改如下:INCLUDE MACRO.MAC ;假设存放的宏库名为MACRO.MAC.MODEL SMALL.386.DATADATA DD 101246,274365,843250,475536SUM DQ ?.CODESTART: MOV AX, DATAMOV DS, AXSUMMING DATA, 4, SUMMOV AX, 4C00HINT 21HEND START
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!