请编制程序PROG1.ASM,其功能是:对内存中连续存放着20个补码表示的无符号整数进行从大到小的排序,结果存放在RESULT开始的内存单元中。部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文刊:OUTPUT1.DAT中。请在BEGIN和END之间补充一段源程序,完成要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均

题目

请编制程序PROG1.ASM,其功能是:对内存中连续存放着20个补码表示的无符号整数进行从大到小的排序,结果存放在RESULT开始的内存单元中。

部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文刊:OUTPUT1.DAT中。请在BEGIN和END之间补充一段源程序,完成要求的功能。

对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。

试题程序:

EXTRN LOAD:FAR, SAVE:FAR

N EQU 20

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 DUP(?)

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,NAMEO ; 原始数据文件名

MOV CX.N ; 字节数

CALL LOAD ; 从'INPUT1.DAT中读取数据'

;****BEGIN****

……

……

……

;****END****

LEA DX,RESULT ; 结果数据区首址

LEA SI,NAME1 ; 结果文件名

MOV CX,N ; 结果字节数

CALL SAVE ; 保存结果到文件

RET

START ENDP

CSEG ENDS

END START


相似考题
参考答案和解析
正确答案:; ****BEGIN**** MOV DXN DEC DX L1: LEA SISOURCE MOV CXDX MOV BX0 L2: MOV AL[SI] INC SI CMP AL[SI] JAE L3 MOV AH[SI] MOV [SI] AL MOV [SI-1]AH MOV BX I L3: LOOP L2 CMP BX0 JZ STORE DEC DX JNZ L1 STORE: MOV CXN LEA SISOURCE LEA DIRESULT CLD REP MOVSB ; ****END****
; ****BEGIN**** MOV DX,N DEC DX L1: LEA SI,SOURCE MOV CX,DX MOV BX,0 L2: MOV AL,[SI] INC SI CMP AL,[SI] JAE L3 MOV AH,[SI] MOV [SI] ,AL MOV [SI-1],AH MOV BX, I L3: LOOP L2 CMP BX,0 JZ STORE DEC DX JNZ L1 STORE: MOV CX,N LEA SI,SOURCE LEA DI,RESULT CLD REP MOVSB ; ****END**** 解析:本题可采用冒泡排序算法。对于SOURCE开始的20个内存单元中的无符号数,依次将相邻的两个数进行比较,每次将较小的数调整到后面。经过一轮比较后,最小的数排到第 20个位置;再将剩下的19个数两两进行比较,排在第19个位置上的数为次小数;重复比较共19遍,完成排序操作。
更多“请编制程序PROG1.ASM,其功能是:对内存中连续存放着20个补码表示的无符号整数进行从大到小的排序, ”相关问题
  • 第1题:

    设机器数字长为 8 位(其中1位为符号位)对于整数,当其分别表示无符号数、原码、补码和反码时,对于其可以表示的真值范围正确的是:

    A.无符号数:0,1,2,…,255

    B.原码:-128,-127,-126,…,127

    C.补码:-128,-127,…,127,128

    D.反码:-128,-127,-126,…,127


    1,1110111;–1001;-9

  • 第2题:

    1、编写程序,定义数组a[50],编程实现以下功能: (1) 输入50个整数(存于整数数组a中); (2) 计算并输出最小值(记为min); (3) 计算并输出最大值(记为max); (4) 按从大到小的顺序排序后输出,每行输出10个。


    <pre>import matplotlib.pyplot as pltimport numpy as npnums = np.arange(0, 51)plt.subplot(211)plt.plot(nums)plt.show()</pre>

  • 第3题:

    编写程序,定义数组a[50],编程实现以下功能: (1) 输入50个整数(存于整数数组a中); (2) 计算并输出最小值(记为min); (3) 计算并输出最大值(记为max); (4) 按从大到小的顺序排序后输出,每行输出10个。


    行和

  • 第4题:

    17、8位2补码、8位1补码、8位无符号数、8位符号带大小数表示的整数范围分别是多少?


    -128;127

  • 第5题:

    4、利用rand产生10个随机数,利用for循环对其进行排序(从大到小)


    参考答案:#import randomlistRandom = [random.randint(1, 10) for i in range(20)]noRepeat = set()for item in listRandom: noRepeat.add(item)noRepeat = list(noRepeat)#print(listRandom)print(noRepeat)