汇编语言冒泡排序

实验一      VS下汇编语言编程与调试
一、在Visual Studio下建立汇编语言的编程环境
在当前解决方案下建立工程sort,汇编源程序名 sort1.asm,必须用asm32.inc
二、编制冒泡排序的程序
1.  从键盘输入0<n<100个有符号整数(32位),编制冒泡排序的程序,实现从小到大排序。然后输出显示。不采用子程序方式!
2.  要求:规定的输入输出界面。课堂检查时,数组元素寻址方式为:奇数学号[EBX+EDI*4][EBX+EDI*4+4] ,偶号arr[ESI*4]arr[ESI*4+4]。计数用ECX。

数据:若学号1150310118、身份证号230106199812216810,则输入10个数为 1 15 03 101 18 -230106 -1998 -12 -21 -6810 学号、身份证中字母为9


汇编程序:

头文件:

ASM32.INC

.386 ; 指定最低兼容的CPU
.MODEL        FLAT, STDCALL ; 指定存储模式,函数调用缺省规范
.STACK        1024 ; 定义堆栈段,指定段大小,缺省4K
INCLUDELIB "D:\MSVCRT.LIB"; 连接C函数库
ExitProcess  PROTO    :DWORD
printf PROTO C : DWORD, : VARARG; C函数的声明
scanf PROTO C : DWORD, : VARARG
getchar PROTO C


chr$ MACRO any_text : VARARG; 
LOCAL txtname
.DATA
txtname db any_text, 0
ALIGN 4
.code
EXITM <OFFSET txtname>
ENDM




sort1.asm

INCLUDE  ASM32.INC

COUNT = 100
.DATA
ARR DWORD COUNT DUP(?)
N DWORD ?

.CODE
MAIN PROC
INVOKE printf,chr$("请输入数组元素个数:")
INVOKE  scanf,chr$("%d"),OFFSET N


MOV ECX,N
MOV EBX,OFFSET ARR
MOV ESI,0


L1: PUSH ECX
INVOKE scanf,chr$("%d"),ADDR ARR[ESI*4]
POP ECX
INC ESI
LOOP L1


INVOKE getchar


    MOV     ECX,N
DEC     ECX
L4: PUSH ECX

MOV ESI,0
L2: MOV EAX,ARR[ESI*4]
CMP DWORD PTR ARR[ESI*4+4],EAX
JGE LL
XCHG EAX,ARR[ESI*4+4]
MOV ARR[ESI*4],EAX

LL: INC ESI
LOOP L2


POP ECX
LOOP L4

MOV ECX,N
MOV ESI,0
L3: PUSH ECX
INVOKE printf,chr$("%-8d"),DWORD PTR ARR[ESI*4]
POP ECX
INC ESI
LOOP L3
INVOKE getchar

INVOKE ExitProcess,0

MAIN ENDP

END       MAIN


sort2.asm


INCLUDE  ASM32.INC


COUNT = 100
.DATA
V DWORD COUNT DUP(?)
N DWORD ?

.CODE
MAIN PROC
INVOKE printf,chr$("请输入数组元素个数:")
INVOKE  scanf,chr$("%d"),OFFSET N

MOV ECX,N
MOV EBX,OFFSET V
MOV ESI,0
L1: PUSH ECX
LEA EAX,[EBX+ESI*4]
INVOKE scanf,chr$("%d"),EAX
POP ECX
INC ESI
LOOP L1

INVOKE getchar


    MOV     ECX,N
DEC     ECX

L4: PUSH ECX

MOV ESI,0
L2: MOV EAX,[EBX+ESI*4]
CMP DWORD PTR [EBX+ESI*4+4],EAX
JGE LL
XCHG EAX,[EBX+ESI*4+4]
MOV [EBX+ESI*4],EAX

LL: INC ESI
LOOP L2

POP ECX
LOOP L4


MOV ECX,N
MOV ESI,0
L3: PUSH ECX
INVOKE printf,chr$("%-8d"),DWORD PTR [EBX+ESI*4]
POP ECX
INC ESI
LOOP L3
INVOKE getchar


INVOKE ExitProcess,0


MAIN ENDP


END       MAIN

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值