内容发布更新时间 : 2024/11/16 20:24:44星期一 下面是文章的全部内容请认真阅读。
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: ??