A.SUB AX,BX JC label
B.SUB AX,BX JNC lable
C.CMP AX,BX JA lable
D.CMP AX,BX JG label
分别写出实现如下功能的程序段
(1)将AX中间8位(作高8位),BX低4位和DX高4位(作低4位)拼成一个新字。
(2)将CX中间8位取反,其余位不变。
(3)将数据段中以BX为偏移地址的连续3单元中的无符号数求和。
(4)将数据段中以BX为偏移地址的连续4单元的内容颠倒过来。
(5)将BX中的4位压缩BCD数用非压缩BCD数形式按序放在AL,BL,CL和DL中。
(6)不用乘法指令实现AL (无符号数)乘以20。
A.SUB AX,BX
B.SUB AX,BX JC label JNC lable
C.CMP AX,BX
D.CMP AX,BX JA lable JG label
程序中,COUNT为序列元素个数,OFFL为序列偏移量,BX为交换标志寄存器(BX =1,说明此趟排序扫描后未发生交换操作,表示序列中的元素已排好序)。
例如:内存中有01H,04H,02H,…(假设后十七个字节均大于04H)
结果为01H,02H,04H,…(后跟十七个字节,按从小到大的顺序排列)
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUT- PUT1.DAT中。请编写BEGIM到END之间代码。对程序必须进行汇编,并与IO.OBJ连接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分);
部分源程序如下:
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP ()
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP ()
RESULT DB N DUP (0)
NAME0 DB 'INPUT1. DAT', 0
NAME1 DB 'OUTPUT1. DAT', 0
COUNT DW ?
OFFL DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS, AX
LEA DX, SOURCE ; 数据区起始地址
LEA SI,NAMEO ; 原始数据文件名
MOV CX,N ; 字节数
CALL LOAD ; 从'INPUT1.DAT'中读取数据
**** BEGIN ****
***** END *****
LEA DX,RESULT ; 结果数据区首地址
LEA SI,NAME1 ; 结果文件名
MOV CX,N ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START
相关知识:
●无符号数比较大小。
有符号数和无符号数比较大小采用的是不同的指令,本题目要求将无符号数进行排序,这里仅介绍无符号数的比较指令。
(1)“高于”或“不低于等于”条件转移指令
指令格式:JA/JNBE短标号地址
(2)“高于等于”或“不低于”条件转移指令
指令格式:JAE/JNB短标号地址
(3)“等于”条件转移指令
指令格式:JE 短标号地址
(4)“不等于”条件转移指令
指令格式:JNE 短标号地址
(5)“低于等于”或“不高于”条件转移指令
指令格式:JBE/JNA 短标号地址
(6)“低于”或“不高于等于”条件转移指令
指令格式:JB/JNAE 短标号地址
●数组的排序
数组的排序的方法有很多种,可以采用“冒泡排序”、“直接插入排序”、“简单选择排序”等算法复杂度为O(n(上标)2)的简单排序算法,也可采用那些算法复杂度为O(nlog(下标)2n)或O(d (n+rd))的算法,但简单排序算法比较容易理解,编程比较方便。通过阅读我们发现出题者的意愿就是采用冒泡排序方法,因为它要多次扫描数组,而且有一个标志指明一趟扫描是否发生数据交换,这是典型冒泡排序方法。当然大家也可采用别的排序算法,作为题目的分析者我们就不采用别的方法了。
●串的移动
例如:
内存中有:3EH,0FEH,5DH……(假设后面的7个数都小于3EH)
结果为: 0FEH,5DH,3EH……(后面跟7个字,按照从大到小的顺序排列)。
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。
请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
【试题程序】
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10
SSEG SEGMENT STACK
DB 256 DUP ()
SSEG ENDS
DSEG SEGMENT
SOURCE DB N DUP ()
RESULT DB N DUP (0)
NAME0 DB 'INPUT.DAT',0
NAME1 DB 'OUTPUT.DAT',0
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
LEA DX, SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
;******** BEGIN ********
MOV SI,OFFSET SOURCE
MOV DI,OFFSET RESULT
MOV CX,N
AGAIN0: MOV AX, [SI]
MOV [DI],AX
ADD SI, (1)
(2)
LOOP AGAIN0
CLD
MOV BX,N-1
AGAIN1: MOV SI,OFFSET RESULT
MOV CX,BX
AGAIN2: LODSB
CMP [SI],AX
(3)
XCHG [SI],AX
(4)
NEXT: LOOP AGAIN2
(5)
JNZ AGAIN1
;******** END ********
LEA DX,RESULT
LEA SI,NAME1
MOV CX,N
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
例如:
数据为:09H,7EH,89H,F6H,17H……67H(N个数据)
结果为:7EH (最大数),F6H,81H,76H,0CH,E8H……98H(原N个数的逻辑反)
部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT 中读入从SOURCE开始的内存单元,运算结果要求从RESIULT开始存放,由SAVE 过程保存到OUTPUT1.DAT 文件中。请在BEGIN和END 之间补充使其完整,完成要求的功能。或删除BEGIN和END 之间原有的代码井自行编程来完成要求的功能。
对程序必须进行汇编,并与IO. OBJ 链接产生PROG1. EXE 执行文件,最终产生运行结果。
部分程序如下;
;PROG1. ASM
EXTRN LOAD: FAR,SAVE:FAR
N EQU 30
DSEG SEGMENT
SOURCE DW N DUP ()
RESULT DW N DUP (0)
NAME0 DB 'INPUT1.DAT,0
NAME1 DB 'OUTPUT1.DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DB 128 DHP ()
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG;SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX, DSEG
MOV DS,AX
MOV ES, AX
LEA DX,SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; *** BEGIN ***
______ SI,SOURCE
MOV BX,OFFSET SOURCE
LEA DI,RESULT
L1: MOV CX,N
MOV DX,CX
DEC DX
MOV AL,______
L2: INC BX
______ AL,[BX]
______________
MOV AL,[BX]
L3: DEC DX
JNZ______
MOV [DI],AL
INC DI
CLD
MAX: LODSB
NOT AL
______________
LOOP MAX
; *** END ***
LEA DX,RESULT
LEA SI,NAME1
MOV CX,N
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!