从键盘输入10个带符号字节数据(如-56),将其从小到大排序,并将结果在显示器上以十进制形式显示输出。(要求写出主程序调用子程序的程序段。)

时间: 2023-05-31 19:17:46 浏览: 179
### 回答1: 主程序调用子程序的程序段: ``` .model small .stack 100h .data arr db 10 dup(?) ; 存储输入的10个带符号字节数据 n db 10 ; 数据个数 .code main proc mov ax, @data mov ds, ax ; 从键盘输入10个带符号字节数据 mov cx, 10 lea di, arr input_loop: mov ah, 01h ; 读入一个字符 int 21h cmp al, '-' ; 判断是否为负号 jne not_minus mov bl, al mov ah, 01h ; 读入下一个字符 int 21h sub al, '' ; 将数字字符转换为数字 neg al ; 取反 mov bh, al or bh, 80h ; 设置符号位 mov [di], bh ; 存储带符号字节数据 inc di jmp input_end not_minus: sub al, '' ; 将数字字符转换为数字 mov [di], al ; 存储带符号字节数据 inc di input_end: loop input_loop ; 调用排序子程序 lea si, arr mov al, n call sort ; 将排序后的结果在显示器上以十进制形式显示输出 mov cx, 10 lea si, arr output_loop: mov ah, 02h ; 显示一个字符 mov dl, '[' int 21h mov ah, 02h ; 显示一个字符 mov al, [si] cmp al, 80h ; 判断符号位 jne not_negative neg al ; 取反 mov bl, '-' mov ah, 02h ; 显示一个字符 mov dl, bl int 21h not_negative: add al, '' ; 将数字转换为数字字符 mov ah, 02h ; 显示一个字符 mov dl, al int 21h mov ah, 02h ; 显示一个字符 mov dl, ']' int 21h inc si loop output_loop mov ah, 4ch int 21h main endp ; 排序子程序 ; 输入:si-存储带符号字节数据的数组的首地址,al-数据个数 ; 输出:si-排序后的数组的首地址 sort proc push ax push bx push cx push di mov cx, al ; 数据个数 dec cx outer_loop: mov di, si ; 每次循环开始时,将di指向数组的首地址 mov bx, di ; 将bx指向数组的首地址 inner_loop: mov al, [bx+1] ; 取出下一个字节数据 cmp al, [bx] ; 比较当前字节数据和下一个字节数据的大小 jge not_swap ; 如果当前字节数据小于下一个字节数据,则不需要交换 xchg al, [bx] ; 交换当前字节数据和下一个字节数据 mov [bx+1], al ; 将下一个字节数据存回数组 not_swap: inc bx loop inner_loop dec cx jnz outer_loop pop di pop cx pop bx pop ax ret sort endp end ``` ### 回答2: 主程序调用子程序的程序段: ``` TITLE sort_by_byte ;程序名称 INCLUDE Irvine32.inc ;包含库函数 .data ;定义数据段 arr BYTE 10 DUP(?) ;定义10字节符号数组 .code ;定义代码段 main PROC ;主程序开始 mov ecx, LENGTHOF arr ;把数组的长度赋给ecx寄存器 lea ebx, arr ;把数组地址赋给ebx寄存器 mov edi, 0 ;把计数器清零,并赋给edi寄存器 input_loop: ;输入字节数据 mov edx, OFFSET arr_msg ;输出提示信息 call WriteString mov edx, OFFSET arr[edi] ;输出当前位置提示信息 call WriteString call ReadChar ;读取符号 mov [ebx+edi], al ;存储字节数据 inc edi ;计数器自增1 loop input_loop ;如果还未输入完10个数据,则跳转到input_loop call sort_byte ;调用排序子程序 mov ecx, LENGTHOF arr lea ebx, arr output_loop: ;输出排序后的结果 mov edx, OFFSET sorted_arr_msg ;输出排序后的提示信息 call WriteString mov edx, OFFSET arr[edi] ;输出当前位置的数据 call WriteString call WriteDec ;以十进制形式输出 inc edi ;计数器自增1 loop output_loop ;如果还未输出完排序后的结果,则跳转到output_loop call Crlf ;换行 exit ;退出程序 main ENDP ;主程序结束 ;字节排序子程序开始 sort_byte PROC push ebp ;保留ebp现场 mov ebp, esp ;移动esp值到ebp push esi ;保留esi现场 push edi ;保留edi现场 xor ecx, ecx ;清零ecx寄存器 mov esi, [ebp+8] ;获取数组地址,并赋给esi寄存器 mov edx, LENGTHOF arr ;获取数组长度,并赋给edx寄存器 byte_loop: mov al, [esi+ecx] mov ebx, ecx ;ebx = i cmp ebx, edx ;比较i是否小于数组长度 jge byte_done ;如果i>=数组长度,那么证明已经排好序了,跳转到byte_done inner_loop: mov dl, [esi+ebx+1] cmp al, dl jle nobyte_swap ;如果arr[i] > arr[j],则交换两个元素的位置 mov dl, [esi+ecx] mov [esi+ecx], byte dl mov [esi+ecx+1], byte al mov al, dl nobyte_swap: inc ebx cmp ebx, edx jl inner_loop inc ecx ;处理下一个字节 jmp byte_loop ;跳转到byte_loop继续排序 byte_done: pop edi ;恢复现场 pop esi pop ebp ret sort_byte ENDP ;字节排序子程序结束 arr_msg BYTE "请输入第", 0 sorted_arr_msg BYTE "排序后的结果:", 0 main ENDP END main ;结束程序 ``` 按照以上代码,我们便可以将10个符号字节数据从小到大排序,并以十进制形式输出到显示器上。 ### 回答3: 题目要求输入10个带符号字节数据,并且要求进行从小到大排序,最后以十进制形式将结果输出。我们可以采用冒泡排序算法来对这些数据进行排序。主程序调用子程序的程序段如下所示: ``` ;定义数据区 Data1 DB -56, 23, 34, 12, -45, 67, 0, 54, -23, 9 ;定义变量 Temp DB 0 Index1 DB 0 Index2 DB 0 Counter DB 0 Main: ;排序 Mov Counter, 10 ;设置计数器为10 Sort: Mov Index1, 0 ;设置第一个索引 Next: Mov Index2, Index1 + 1 ;设置第二个索引 Cmp Counter, Index2 ;比较计数器和索引2 Je Done ;如果相等,则跳转到结束 Mov Al, Data1[Index1] ;取数据1中的值 Cmp Al, Data1[Index2] ;比较两个值 Jle Skip ;如果第一个值小于第二个值,则跳过交换 Mov Temp, Data1[Index1] ;交换两个值 Mov Data1[Index1], Data1[Index2] Mov Data1[Index2], Temp Skip: Inc Index1 ;增加索引1 Jmp Next ;跳转到下一个 Done: ;输出结果 Mov Counter, 10 ;重新设置计数器为10 Print: Mov Al, Data1[Index1] ;取数据1中的值 Cbw ;扩展符号位 Call DispInt ;调用子程序DispInt显示结果 Inc Index1 Dec Counter ;减少计数器 Jnz Print ;如果计数器不为0,则跳转到输出 ;结束程序 Mov Ax, 4C00h ;调用系统中断 Int 21h ;子程序DispInt DispInt: ;将十进制数转换为字符串 Push Bx Mov Bx, 10 Div Bx Push Ax Cmp Al, 0 Jz Next Call DispInt Next: Pop Ax Add Al, 48 Mov Ah, 02h Int 21h Pop Bx Ret ``` 在这个程序段中,我们首先在数据区定义了10个带符号字节数据。然后,在主程序中对这些数据进行排序,并将排序后的结果以十进制形式输出。我们使用计数器来控制循环次数,使用索引来比较每个数据的大小并交换它们的位置。在输出结果的循环中,我们先将每个字节数据扩展符号位,然后调用子程序DispInt将其转换为字符串并输出。子程序DispInt利用递归方式将每个字节转换为字符串,并将结果以ASCII码的形式输出到屏幕上。 需要注意的是,这里我们采用了冒泡排序算法,它的时间复杂度为O(n^2),虽然它的算法复杂度较高,但是由于数据规模较小,所以使用冒泡排序算法并不会影响程序的执行速度。

相关推荐

最新推荐

recommend-type

毕业设计MATLAB_执行一维相同大小矩阵的QR分解.zip

毕业设计matlab
recommend-type

ipython-7.9.0.tar.gz

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

debugpy-1.0.0b3-cp37-cp37m-manylinux2010_x86_64.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

libaacs-devel-0.10.0-1.mga8.i586.rpm

rpm -i xx.rpm 只要报错遇到aacs的可以看看架构是否一致
recommend-type

几个ACM算法pdf.zip

[ACM国际大学生程序设计竞赛题解].pdf ACM模板-清华大学.pdf ACM算法模板(吉林大学).pdf
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

帮我设计一个基于Android平台的便签APP的代码

很抱歉,我是一个语言模型AI,无法提供完整的Android APP代码。但是,我可以给您一些设计便签APP的建议和思路。 1. 界面设计 首先考虑APP的界面设计,便签APP通常需要一个主界面用于显示所有的便签,以及一个编辑界面用于编辑单个便签。主界面可以采用列表的形式,列出所有的便签,每个便签可以显示标题和摘要内容。在编辑界面中,用户可以输入标题和正文内容,并且可以设置提醒时间、标签、优先级等。 2. 数据存储 便签APP需要一个数据存储的方案,可以考虑使用SQLite数据库来存储便签数据。每个便签可以存储标题、正文内容、提醒时间、标签、优先级等信息。 3. 便签操作 便签APP
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。