汇编作业题答案 下载本文

内容发布更新时间 : 2024/4/28 8:35:22星期一 下面是文章的全部内容请认真阅读。

END START

30 无符号数变量X用DD定义,编写程序,用十六进制格式输出变量X的值。 答: .386

DATA SEGEMNT USE16

X DD 36895471 ;一个32B长整数

MESS DB 0DH, 0AH, ‘The X in hexdecimal is : $’ HEXTAB DB ‘0123456789ABCDEF’ DATA ENDS

CODE SEGMENT USE16

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX LEA DX, MESS MOV AH, 09H INT 21H ;输出前导信息

MOV ESI, X ;将X存入ESI

MOV CX, 8 ;循环计数器置初值 LEA BX, HEXTAB ;换码表首地址装入BX AGAIN: ROL ESI, 4 ;把最高4位移到最低4位上 MOV AX, SI ;低8位转入AL AND AX, 0004H ;清除高4位

XLAT ;转换成十六进制数字的ASCII代码 MOV DL, AL MOV AH, 2 INT 21H ;输出一个十六进制数字

LOOP AGAIN ;循环16次 MOV AX, 4C00H INT 21H CODE ENDS END START

31 从键盘上输入两个有符号字整数A和B,计算并输出它们的和、差、积、商和余数。

答: INCLUDE YLIB.H DATA SEGEMNT

MESS1 DB 0DH, 0AH, ‘Input a integer number please : $’ MESS2 DB 0DH, 0AH, ‘The sum of 2 number is : $’

MESS3 DB 0DH, 0AH, ‘The difference of 2 number is : $’ MESS4 DB 0DH, 0AH, ‘The product of 2 number is : $’ MESS5 DB 0DH, 0AH, ‘The quotient of 2 number is : $’ MESS6 DB 0DH, 0AH, ‘The remainder of 2 number is : $’ A DW ?

32 数组ARRAY中存有10个无符号字整数(元素序号0~9),现在要删除其中的

第5个元素。编写程序,把第6~9个元素移到第5~8个元素的位置上,并把第9个元素清零。 答: DATA SEGEMNT

ARRAY DW -386, 97, 213, 21, 77, -91, 56, 7, 123, 65

B DW ? DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX LEA DX, MESS1

CALL READINT ;输入第一个有符号整数 MOV A, AX

LEA DX, MESS1

CALL READINT ;输入第二个有符号整数 MOV B, AX ADD AX, A ;求两个数的和 LEA DX, MESS2

CALL WRITEINT ;输出两个数的和 MOV AX, A SUB AX, B ;求两个数的差 LEA DX, MESS3

CALL WRITEINT ;输出两个数的差 MOV AX, A

IMUL B ;求两个数的积,假设仍然是16位 LEA DX, MESS4

CALL WRITEINT ;输出两个数的积 MOV AX, A CWD

IDIV B ;求两个数的商和余数 PUSH DX LEA DX, MESS5

CALL WRITEINT ;输出两个数的商 POP AX LEA DX, MESS6

CALL WRITEINT ;输出两个数的余数 CALL CRLF

MOV AX, 4C00H INT 21H CODE ENDS END START

DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX MOV BX, 6*2 ;第六个元素在数组内的位移 MOV CX, 4 ;循环计数器置初值 AGAIN: MOV AX, ARRAY[BX] ;取出一个元素 MOV ARRAY[BX-2], AX ;向前移动一个位置 ADD BX, 2 ;修改指针 LOOP AGAIN ;循环4次 MOV ARRAY[BX], 0 ;最后一个元素清零 MOV AX, 4C00H INT 21H CODE ENDS END START

33 编写指令序列,把AX中的16b二进制分为4组,每组4b,分别置入AL,BL,

CL,DL中。 答: MOV DX, AX ;最低4位直接进入DX

MOV CX, 4

ROL AX, CL ;最高4位移入最低4位

PUSH AX ;压入堆栈保存(准备送入AL) ROL AX, CL ;次高4位移入最低4位 MOV BX, AX ;送入BL ROL AX, CL ;第3组4位移入最低4位 MOV CX, AX ;送入CL POP AX ;从堆栈中弹出原最高4位 AND AX, 000FH ;清除高12位 AND BX, 000FH ;清除高12位 AND CX, 000FH ;清除高12位 AND DX, 000FH ;清除高12位

34 什么叫做“控制转移指令”?它和数据传送、运算指令有什么区别?它是怎

样实现它的功能的?

答:控制转移指令是可以改变指令执行顺序的指令。数据传送、运算指令总是顺

序执行的,而控制转移指令通过改变IP和/或CS寄存器的值,改变了程序指令的执行顺序。

35 指令“JMP DI”和“JMP WORD PTR [DI]”作用有什么不同?请说明。 答:上述两条指令都是段内近转移指令,但是偏移地址的来源不同。指令“JMP

DI”执行时,新的偏移地址在DI寄存器内,“JMP WORD PTR [DI]”时,目的偏移地址在存储单元中,该存储单元的地址在DS: DI中。

36 什么是“近程”转移?什么是“远程”转移?它们的实现方法有什么不同? 答:执行“近程”转移时,转移的目的地与出发地在同一个段内,它们具有相同

的段基址。因此,为了实现“近程”转移,只需要改变IP寄存器的值。“远程”转移的目的地与出发地不在同一个段,为了实现这个转移,必须同时改变CS和IP寄存器的值。

37 已知(AX)= 836BH,X分别取下列值,执行“CMP AX, X”后,标志位ZF、

CF、OF、SF各是什么?

(1)X=3000H (2)X=8000H (3)X=7FFFFH (4)X=0FFFFH (5)X=0 答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是:

(1) ZCOS=0010 (2) ZCOS=0000 (3) ZCOS=0010 (4) ZCOS=0101 (5) ZCOS=0001

38 已知(AX)= 836BH,X分别取下列值,执行“TEST AX, X”后,标志位ZF、

CF、OF、SF各是什么?

(1)X=0001H (2)X=8000H (3)X=0007H (4)X=0FFFFH (5)X=0 答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是:

(1) ZCOS=0000 (2) ZCOS=0001 (3) ZCOS=0000 (4) ZCOS=0001 (5) ZCOS=1000

39 测试名为X的一个字节,如果X的第1,3位均为1,转移到L1,如果只有一

位为1,转移到L2,如果两位全为0,转移到L3。写出对应的指令序列。 答: MOV AL, X AND AL, 0000 1010B JZ L3 CMP AL, 0000 1010B JE L1 JMP L2

40 假设X和X+2字单元存放有双精度数P,Y和Y+2字单元存放有双精度数Q,

下面程序完成了什么工作? MOV DX, X+2 MOV AX, X ;双精度数P送入DX, AX

ADD AX, X ADC DX, X+2 ;计算2*P送入DX, AX

CMP DX, Y+2 ;2P与Q的高位比较 JL L2 ;2PQ,转L1 (Z=1) CMP AX, Y ;如果高位相等,则比较低位 JBE L2 ;2P的低位小于等于Q的低位,转L2(Z=2) L1: MOV Z, 1 JMP SHORT EXIT L2: MOV Z, 2

EXIT: ??

答:程序根据2P与Q的大小,确定Z的值。 如果2P≤Q,则Z=2 如果2P>Q, 则Z=1 请参阅程序注解

41 编写指令序列,将AX和BX中较大的绝对值存入AX,较小的绝对值存入BX。 答: AND AX, AX

JGE SKIP1 NEG AX SKIP1: AND BX, BX JGE SKIP2 NEG BX SKIP2: CMP AX, BX JGE SKIP3 XCHG AX, BX SKIP3: ??

42 编写指令序列,比较AX、BX中的数的绝对值,绝对值较大的数存入AX,绝

对值较小的数存入BX。 答: PUSH AX PUSH BX

AND AX, AX JGE SKIP1 NEG AX SKIP1: AND BX, BX JGE SKIP2 NEG BX SKIP2: CMP AX, BX POP BX POP AX JGE SKIP3 XCHG AX, BX SKIP3: ??

43 编写指令序列,如果AL寄存器存放的是小写字母,把它转换成大写字母,否

则不改变AL内容。 答: CMP AL, ‘a’ JB DONE CMP AL, ‘z’ JA DONE SUB AL, ‘a’-‘A’ DONE: ??