汇编复习习题答案(2)

2019-04-10 10:31

L EQU EBUFF - BUFF 问L的值是多少? 答:L=6。

4.10假设程序中的数据定义如下:

LNAME DB 30 DUP (?) ADDRESS DB 30 DUP (?) CITY DB 15 DUP (?) CODE_LIST DB 1, 7, 8, 3, 2

(1) 用一条MOV指令将LNAME的偏移地址放入AX。

(2) 用一条指令将CODE_LIST的头两个字节的内容放入SI。

(3) 用一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实际长度。 答:(1) MOV AX, OFFSET LNAME

(2) MOV SI, WORD PTR CODE_LIST

(3) CODE_LENGTH EQU $ - CODE_LIST ;此语句必须放在CODE_LIST语

句之后 4.11 写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5

和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。 答:DATA_SEG SEGMENT

NUM DB 5

DATA_LIST DW -1, 0, 2, 5, 4, 5 DUP (?) MAX DW ? MIN DW ? DATA_SEG ENDS

;---------------------------------------------------------------- CODE_SEG SEGMENT MAIN PROC FAR

ASSUME CS: CODE_SEG, DS: DATA_SEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, DATA_SEG ;给DS赋值 MOV DS, AX

MOV CX, 4 ;程序段开始 LEA BX, DATA_LIST MOV AX, [BX] MOV MAX, AX MOV MIN, AX

ROUT1: ADD BX, 2

MOV AX, [BX] CMP AX, MAX JNGE ROUT2 MOV MAX, AX

ROUT2: CMP AX, MIN

JNLE ROUT3 MOV MIN, AX

ROUT3: LOOP ROUT1 ;程序段结束

RET

MAIN ENDP CODE_SEG ENDS

;----------------------------------------------------------------

END START

4.17 写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加

段E_SEG中的ADDEND相加,并把结果存放在D_SEG 段中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为 -15962。 答:程序如下:

D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DD ? D_SEG ENDS ;以上定义数据段 ;---------------------------------------------------------------- E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962 E_SEG ENDS ;以上定义附加段 ;---------------------------------------------------------------- C_SEG SEGMENT MAIN PROC FAR

ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, D_SEG MOV DS, AX ;给DS赋值 MOV AX, E_SEG MOV ES, AX ;给ES赋值

MOV AX, AUGW ;以下6条指令进行加法计算 MOV BX, AUGW+2 ADD AX, ES: ADDW ADC BX, ES: ADDW+2 ;不考虑有符号数溢出 MOV WORD PTR SUM, AX MOV WORD PTR [SUM+2], BX RET

MAIN ENDP

C_SEG ENDS ;以上定义代码段 ;----------------------------------------------------------------

END START

4.19 试说明下述指令中哪些需要加上PTR伪操作符:

BVAL DB 10H,20H WVAL DW 1000H

(1) MOV AL,BVAL ;不需要 (2) MOV DL,[BX] ;不需要 (3) SUB [BX],2 ;需要,如SUB BYTE PTR [BX],2 (4) MOV CL,WVAL ;需要,如MOV CL,BYTE PTR

WVAL

(5) ADD AL,BVAL+1 ;不需要 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 答:程序段如下:

BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用

INT 21H CMP AL, ‘a’ ;输入字符<‘a’吗? JB STOP CMP AL, ‘z’ ;输入字符>‘z’吗? JA STOP DEC AL ;得到前导字符 MOV DL, AL ;准备显示三个字符 MOV CX, 3

DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用

INT 21H INC DL

LOOP DISPLAY

STOP: RET 5.4 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’, 若不相同则显示‘NO MATCH’。 答:程序如下:

DSEG SEGMENT

STRING1 DB ‘I am a student.’ STRING2 DB ‘I am a student!’ YES DB ‘MATCH’, 0DH, 0AH, ‘$’ NO DB ‘NO MATCH’, 0DH, 0AH, ‘$’ DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG, ES: DSEG

START: PUSH DS ;设置返回DOS

SUB PUSH MOV MOV MOV

BEGIN:

AX, AX AX

AX, DSEG DS, AX ES, AX

;给DS赋值

;给ES赋值

LEA SI, STRING1 ;设置串比较指令的初值 LEA DI, STRING2 CLD

MOV CX, STRING2 - STRING1 REPE CMPSB ;串比较 JNE DISPNO LEA DX, YES ;显示MATCH JMP DISPLAY

DISPNO: LEA DX, NO ;显示NO MATCH DISPLAY: MOV AH, 9 ;显示一个字符串的DOS调用

INT 21H RET

MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------

END START

5.7 试编写一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它

存放在AX中。 答:程序段如下:

BEGIN: MOV BX, 0

MOV CX, 100

COMPARE: MOV AX, DATA[BX] ;取数组的第一个偶数

ADD BX, 2 TEST AX, 01H ;是偶数吗? LOOPNZ COMPARE ;不是,比较下一个数 JNZ STOP ;没有偶数,退出 JCXZ STOP ;最后一个数是偶数,即为最小偶数,退出

COMPARE1: MOV DX, DATA[BX] ;取数组的下一个偶数

ADD BX, 2 TEST DX, 01H ;是偶数吗? JNZ NEXT ;不是,比较下一个数 CMP AX, DX ;(AX)<(DX)吗? JLE NEXT MOV AX, DX ;(AX)<(DX),则置换(AX)为最小偶数

NEXT: LOOP COMPARE1 STOP: RET 5.9 试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上显示与

它等值的二进制数。 答:程序段如下:

BEGIN: MOV

MOV MOV

INPUT: SHL

MOV INT CMP JB CMP JA AND JMP

AF: AND

CMP JB CMP JA AND ADD

BINARY: OR

DEL JNZ

DISPN: MOV 码显示 DISP: MOV

ROL RCL OR MOV INT LOOP

STOP: RET

BX, 0

CH, 4 CL, 4 BX, CL AH, 1 21H

AL, 30H INPUT AL, 39H AF AL, 0FH BINARY

AL, 1101 1111B AL, 41H INPUT AL, 46H INPUT AL, 0FH AL, 9 BL, AL CH INPUT CX, 16 DL, 0 BX, 1 DL, 1 DL, 30H AH, 2 21H DISP

;用于存放四位的16进制数

;将前面输入的数左移4位 ;从键盘取数

;<0吗?

;不是‘0~F’的数重新输入 ;是‘0~9’吗?

;不是,转‘A~F’的处理 ;转换为:0000B~1001B ;转换为大写字母 ;又

;不是‘A~F’的数重新输入 ;>F吗?

;不是‘A~F’的数重新输入 ;转换为:1010B~1111B ;将键盘输入的数进行组合

;将16位二进制数一位位地转换成ASCII

;进行显示

5.11 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计

数结果。

答:程序段如下:

DSEG SEGMENT BUFF DB 50 DUP (‘ ’) COUNT DW 0 DSEG ENDS

BEGIN: LEA BX, BUFF

MOV COUNT, 0


汇编复习习题答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015浙大远程网络营销作业在线

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: