文档库 最新最全的文档下载
当前位置:文档库 › 汇编经典代码

汇编经典代码

汇编经典代码
汇编经典代码

1.顺序程序设计

将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

DATASEGMENT

DATA1 DB 34H,35H,39H,38H,36H,' ';被加数

DATA2 DB 37H,34H,33H,36H,32H,' ';加数

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

LEASI,DATA1;有效地址送SI,为调用显示子程序做准备

CALLDISPLAY;调用显示子程序

CALLCRLF;调用回车换行子程序

LEA SI,DATA2 ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备

CALLDISPLAY;调用显示子程序

CALLCRLF;调用回车换行子程序

LEADI,DATA1;有效抵制送DI,为加法运算做准备

MOVAX,0

MOVBX,0

MOVCL,05H;记录循环次数

ADDS: MOVAL,[SI];将加数送往AL

SUBAL,30H

ADDAL,BL;加上进位

MOVBL,[DI];将被加数送往BL

SUBBL,30H

ADDAL,BL;加法运算

ADDAL,30H

CMPAL,3AH

JASUBA;结果>=10,跳到SUBA

JBNSUBA

SUBA:SUBAL,0AH;减去10的值,并置BL为1MOVBL,01H

JMPCONTINUE

NSUBA:MOVBL,00H;置BL为0

CONTINUE:MOV[DI],AL;将相加的结果从AL送往DI的地址,即DATA1的地址

INCDI;地址加1

INCSI;地址加1

LOOPADDS;循环

JCSHUCHU

JNCSHUCHU2

SHUCHU2: MOVAL,31H;CF为1设置结果最高位为1JMPCONTINUE2

SHUCHU:MOVAL,30H;CF为0设置结果最高位为0

CONTINUE2:MOV[DI],AL

MOVAX,4C00H;返回DOSINT21H

MAINENDP

CRLFPROCNEAR;回车、换行于功能 MOVDL,0DH

MOVAH,02H INT21H MOVDL,0AH

MOVAH,02H INT21H

RET

CRLFENDP

DISPLAY PROCNEAR ;显示于功能

MOVBX,0006H ;记录循环次数

DSL:MOVDL,[SI+BX-1];将有效地址内的内容送往DL

MOVAH,02 ;2号功能输出

INT21H

DECBX ;BX自动减1

JNZDSL

RET

DISPLAY ENDP

CODEENDS

ENDSTART

2分支程序设计实验

接收键盘输入字符,将其中的小写字母转换为大写字母并显示。

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE

START:MOVAH,00H

INT16H

CMPAL,0DH

JZOVER

CALLJUDGE

MOVDL,AL

MOVAH,02H

INT21H

JMPSTART

OVER:MOVAH,4CH

INT21H

MAINENDP

JUDGEPROCNEAR

CMPAL,'a'

JBSTOP

CMPAL,'z'

JASTOP

STOP:RET

JUDGEENDP

CODEENDS

ENDSTART

3 循环程序设计实验

统计一个有10人的班中,男、女生的人数各为多少。将男生人数存入变量MAN、女生人数存入变量WOMAN中。DATASEGMENT

MANDB 0,0

WOMANDB0,0

STRINGDB ' iuput people number! (man is 0, woman is 1 ) $'

SMDB 'man is :$'

SWDB 'woman is :$'

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVAH,09H;将STRING的内容输出

MOVDX,OFFSET STRING

INT21H

CALLCRLF

MOVCX,10;男女生总人数

AA:MOVAH,01H;从键盘输入,0为男,1为女

INT21H

CMPAL,30H;与'0'比较

JNZADDW;不为'0',女生人数加1

INCMAN;否则男生人数加1

BB:LOOPAA

JMPDISPLY;打印

ADDW:INCWOMAN

JMPBB

DISPLY:CALLCRLF

MOVAH,09H;字符串输出

MOVDX,OFFSET SM

INT21H

MOVAH,02H;男生人数统计结果输出

MOVDL,MAN

ADDDL,30H

CALLJUDGE

CALLCRLF

MOVAH,09H;字符串输出

MOVDX,OFFSET SW

MOVAH,02H;女生人数统计结果输出

MOVDL,WOMAN

ADDDL,30H

CALLJUDGE

MOVAH,4CH;返回DOS

INT21H

MAINENDP

JUDGEPROCNEAR;判断结果是否为39H

CMPDL,3AH

JZSHI

CC:INT21H

RET

SHI:MOVDL,31H

INT21H

MOVDL,30H

JMPCC

JUDGEENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

4 子程序设计实验

1.键盘输入字符,依次显示在行的最左端(即每接受一个字符,显示在屏幕上并回车换行。)2.对频繁使用的回车换行编写为子程序,在主程序中调用完成分行显示。CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE

START:MOVCX,10;设置循环次数

NEXT:MOVAH,01H;从键盘输入一个字符

INT21H

CALLCRLF;调用回车换行子程序

LOOPNEXT

MOVAH,4CH;返回DOS

INT21H

MAINENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

5 码制转换程序实验

将ASCⅡ码数据转换成二进制数据。要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储。

DATASEGMENT

STRING1DB'PLEASE INPUT A NUMBER(0~32767):$'

STRING2 DB 'THE ASCII IS:$'

STRING3DB'THE BINARY IS:$'

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

MAINPROCFAR

START:MOVAX,DATA

MOVDS,AX

MOVDX,OFFSET STRING1

MOVAH,09H

INT21H

CALLCRLF

INPUT:MOVAH,01H;输入数据

INT21H

CMPAL,0DH

JZNEXT

SUBAL,30H

JLINPUT

CMPAL,39H

JGINPUT

CBW

XCHGAX,BX;AX为输入值,BX保存结果,两个对调为MUL做准备

MOVDX,10D;将上一次结果乘10

MULDX

XCHGAX,BX;AX为本次输入的值,BX为之前的结果

ADDBX,AX

JMPINPUT

NEXT: CALLCRLF

MOVCL,4D

MOVCH,4D

MOVDX,OFFSET STRING2

CALLCRLF

LOOP0:ROLBX,CL;循环左移,将最高为存到BL的低四位MOVAL,BL

ANDAL,0FH;

ADDAL,30H

CMPAL,3AH

JLOUTPUT

ADDAL,07H

OUTPUT:MOVAH,02H

MOVDL,AL

INT21H

DECCH

JNZLOOP0

CALLCRLF

MOVDX,OFFSET STRING3

MOVAH,09H

INT21H

CALLCRLF

MOVCH,16D

MOVCL,1D

LOOP1:ROLBX,CL

MOVAL,BL

ANDAL,01H

ADDAL,30H

MOVAH,02H

MOVDL,AL

INT21H

DECCH

JNZLOOP1

MOVAH,4CH

INT21H

MAINENDP

OUTSPROCNEAR;字符串输出子程序

MOVAH,09H

INT21H

RET

OUTSENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

INT21H

MOVDL,0AH;换行

INT21H

CODEENDS

ENDSTART

6 两个数相乘的实验

实现十进制数的乘法,被乘数和乘数均以ASCⅡ码形式放在内存中,乘积在屏幕上显示出来。DATASEGMENT

MBCS DW0

MCSDW 0

RESULTDW 0

STRING1DB 'THE BEICHENGSHU IS:$'

STRING2DB 'THE CHENGSHU IS:$'

STRING3DB 'THE RESULT IS:$'

STRINGDB 'THEASCII IS:$'

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVDX,OFFSET STRING1

CALLOUTS

CALLINPUT;输入被乘数

MOVDX,OFFSET STRING

CALLOUTS

CALLCRLF

CALLASCII;被乘数转化为ASCII码输出

CALLCRLF

MOVMBCS,BX;被乘数保存到MBCS中

MOVDX,OFFSET STRING2

CALLOUTS

CALLINPUT;输入乘数

MOVDX,OFFSET STRING

CALLOUTS

CALLCRLF

CALLASCII;乘数转化为ASCII码输出

CALLCRLF

MOVMCS,BX;乘数保存到MCS中

MOVDX,OFFSET STRING3

CALLOUTS

CALLCRLF

MOVAX,MBCS;被乘数

MULBX;乘数与被乘数相乘,结果高位DX,低位AX

MOVRESULT,AX;将AX中的内容保存到RESULT中

MOVBX,RESULT;将低位AX的值送给BX输出

CALLASCII

MOVAH,4CH

INT21H

MAINENDP

INPUTPROCNEAR;输入十进制数,将其转化为ASCII码存到BX中CALLCRLF

MOVBX,0

AA:MOVAH,01H

INT21H

CMPAL,0DH

JZSTOP

SUBAL,30H

JLAA

CMPAL,39H

JGAA

CBW

XCHGAX,BX;AX为输入值,BX保存结果,两个对调为MUL做准备MOVDX,10D;将上一次结果乘10

MULDX

XCHGAX,BX;AX为本次输入的值,BX为之前的结果

ADDBX,AX

JMPAA

STOP:CALLCRLF

RET

INPUTENDP

ASCIIPROCNEAR

MOVCL,4D

MOVCH,4D

CC:ROLBX,CL;循环左移,将最高为存到BL的低四位

MOVAL,BL

ANDAL,0FH;

ADDAL,30H

CMPAL,3AH

JLBB

ADDAL,07H

BB:MOVAH,02H

MOVDL,AL

INT21H

DECCH

JNZCC

RET

OUTSPROCNEAR

MOVAH,09H

INT21H

RET

OUTSENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

7 从键盘输入数据并显示的程序

编写程序将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

DATASEGMENT

STRING1DB 'Please enter a four-digit hexadecimal number:$'

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

MAINPROCFAR

START:MOVAX,DATA

MOVDS,AX

MOVDX,OFFSET STRING1

MOVAH,09H

INT21H

CALLCRLF

MOVCL,4D

INPUT:MOVAH,01H

INT21H

CMPAL,'0'

JBINPUT

CMPAL,'9'

JAZIMU

SUBAL,30H

JMPNEXT

ZIMU:CMPAL,'A'

JBINPUT

JAINPUT

SUBAL,37H

NEXT:CBW

XCHGAX,BX

MOVDX,16D

MULDX

XCHGAX,BX

ADDBX,AX

LOOPINPUT

CALLCRLF

MOVCL,1D

MOVCH,16D

TO:ROLBX,1

MOVDL,BL

ANDDL,01H

ADDDL,30H

MOVAH,02H

INT21H

DECCH

JNZTO

MOVAH,4CH

INT21H

MAINENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

8 字符和数据的显示程序

先显示信息“INPUT STRING THE END FLAG IS $”再接受字符如为0~9则计数器加1并显示数据。

如为非数字,则直接显示但不计数。

DATASEGMENT

STRING1DB'INPUT STRING THE END FLAG IS $'

COUNTDB0

DATAENDS

CODESEGMENT

MAINPROCFAR

START:MOVAX,DATA MOVDS,AX

MOVDX,OFFSET STRING1 MOVAH,09H

INT21H

CALLCRLF

INPUT:MOVAH,0

INT16H

CMPAL,0DH

JZSTOP

CMPAL,'0'

JBTO

CMPAL,'9'

JATO

INCCOUNT

TO:MOVAH,02H

MOVDL,AL

INT21H

JMPINPUT

STOP:CALLCRLF

MOVAH,02H

MOVDL,COUNT

ADDDL,30H

INT21H

MOVAH,4CH

INT21H

MAINENDP

CRLFPROCNEAR;回车换行子程序MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

汇编语言代码规范

汇编语言代码规范 随着程序功能的增加和版本的提高,程序越来越复杂,源文件也越来越多,风格规范的源程序会对软件的升级、修改和维护带来极大的方便,要想开发一个成熟的软件产品,必须在编写源程序的时候就有条不紊,细致严谨。 在编程中,在程序排版、注释、命名和可读性等问题上都有一定的规范,虽然编写可读性良好的代码并不是必然的要求(世界上还有难懂代码比赛,看谁的代码最不好读懂!),但好的代码风格实际上是为自己将来维护和使用这些代码节省时间。本节就是对汇编语言代码风格的建议。 变量和函数的命名 1. 匈牙利表示法 匈牙利表示法主要用在变量和子程序的命名,这是现在大部分程序员都在使用的命名约定。“匈牙利表示法”这个奇怪的名字是为了纪念匈牙利籍的Microsoft 程序员Charles Simonyi,他首先使用了这种命名方法。 匈牙利表示法用连在一起的几个部分来命名一个变量,格式是类型前缀加上变量说明,类型用小写字母表示,如用h表示句柄,用dw表示double word,用sz表示以0结尾的字符串等,说明则用首字母大写的几个英文单词组成,如TimeCounter,NextPoint等,可以令人一眼看出变量的含义来,在汇编语言中常用的类型前缀有: b 表示byte

w 表示word dw 表示dword h 表示句柄 lp 表示指针 sz 表示以0结尾的字符串 lpsz 表示指向0结尾的字符串的指针f 表示浮点数 st 表示一个数据结构 这样一来,变量的意思就很好理解:hWinMain 主窗口的句柄dwTimeCount 时间计数器,以双字定义

szWelcome 欢迎信息字符串,以0结尾 lpBuffer 指向缓冲区的指针 stWndClass WNDCLASS结构 … 很明显,这些变量名比count1,abc,commandlinebuffer和FILEFLAG之类的命名要易于理解。由于匈牙利表示法既描述了变量的类型,又描述了变量的作用,所以能帮助程序员及早发现变量的使用错误,如把一个数值当指针来使用引发的内存页错误等。 对于函数名,由于不会返回多种类型的数值,所以命名时一般不再用类型开头,但名称还是用表示用途的单词组成,每个单词的首字母大写。Windows API是这种命名方式的绝好例子,当人们看到ShowWindow,GetWindowText,DeleteFile和GetCommandLine之类的API函数名称时,恐怕不用查手册,就能知道它们是做什么用的。比起int 21h/09h和int 13h/02h之类的中断调用,好处是不必多讲的。 2. 对匈牙利表示法的补充

汇编_数组排序(附源代码)

备注:源代码附后,源代码要求有注释说明 .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.h cr EQU 0dh Lf EQU 0ah numbers EQU 10 .STACK 4096 .DA TA prompt1 BYTE "Please entry 10 numbers.",cr,Lf,0 prompt2 BYTE "Number : ",0 number DWORD 20 dup(?) ,0 array DWORD 20 dup(?),0 prompt3 BYTE "Now the range is : " ,0 .CODE _start: output prompt1 lea ebx,array mov ecx,numbers inNum: output prompt2 input number,20 atod number mov [ebx] ,eax add ebx, 4 loop inNum output prompt3 mov ecx, numbers cycle1: mov dx,0 lea ebx,array cycle2: inc dx cmp dx,numbers jnl cycle3 ;不小于则转移 mov ax,[ebx] cmp ax,[ebx+4] jg exchange ;大于则转移 add ebx,4 jmp cycle2 exchange: xchg [ebx+4],ax mov [ebx],ax add ebx,4 jmp cycle2 cycle3: loop cycle1

汇编语言程序设计教学大纲

《汇编语言程序设计》课程教学大纲 二、课程简介 汇编语言是计算机能够提供给用户使用的最快最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而,对程序的空间和时间要求很高的场合及需要直接控制硬件的应用场合,汇编语言的应用是必不可少三、课程目标 汇编语言课程是计算机专业的一门专业选修课。通过本课程的学习,应使学 生系统地了解计算机组成原理与内部的运行机理,掌握汇编语言程序设计及相关 知识,为学习本专业后继课程和进行与硬件有关的技术工作打下良好基础。通过 上机实验,使学生受到软硬件实验的初步训练,并培养学生分析问题和解决问题 的能力。 四、教学内容及要求 第一章基础知识 1.教学内容 (1) 为什么要用汇编语言编写程序 (2) 进位计数制与不同基数的数之间的转换 (3) 二进制数和十六进制数运算 (4) 计算机中数和字符的表示 (5) 几种基本的逻辑运算 2.基本要求 了解机器指令、代码指令、机器语言、汇编指令、汇编语言、汇编语言源程 序、汇编程序、汇编等概念;掌握进位计数制与不同基数的数之间的转换及

运算;计算机中数和字符的表示;“与”、“或”、“非”、“异或”等几种基本的逻辑运算; 第二章80X86计算机组织 1.教学内容 计算机系统概述、存储器、中央处理机和外部设备。 2.基本要求 理解计算机的硬件和软件系统及其关系。掌握计算机的基本结构及总线;存储器的内容、地址及存储器的分段;中央处理机的组成、80X86系列CPU工作寄存器构成和功能,特别是段寄存器和标志寄存器;外设接口、端口和8086/8088的端口地址范围和访问方法。 第三章80X86的指令系统 1.教学内容(重点内容) IBM PC机的寻址方式、IBM PC机的指令系统。 2.基本要求 熟练掌握IBM PC机寻址方式及物理地址的计算;数据传送、算术、逻辑、串处理、控制转移和处理机控制指令六组中的所有指令的格式、操作、及影响的标志位。了解机器语言的指令组成; 第四章汇编语言程序格式 1.教学内容 汇编程序功能、伪操作、汇编语言程序格式、汇编语言程序的上机过程。 2.基本要求 掌握DEBUG程序和命令及能用DEBUG 程序调试和运行简单小程序;汇编语言上机步骤、汇编程序的功能;数据定义及存储器分配、表达式赋值“EQU”和“=”、段定义、程序开始和结束、对准、基数控制等六类伪操作;汇编语言程序格式中的名字、操作、操作数和注释等项。 第五章循环与分支程序设计 1.教学内容 程序设计的一般步骤和基本结构、循环程序设计和分支程序设计 2.基本要求 掌握汇编语言程序的编制步骤和结构化程序设计的三种基本结构;循环的设计方法和多层循环的设计;分支程序的设计方法,并能编制相应的程序。第六章子程序结构 1.教学内容 子程序的设计方法、嵌套与递归子程序、子程序举例和DOS系统功能调用

VFP经典有趣小程序 -

VFP经典有趣小程序 中国地质大学(武汉)胡小强制作 一、超级有趣 clea set talk off do while .t. clea do while .t. input space(10)+"请任意输入3-9的数字,然后按回车键"to s if s>9 .OR. s<3 loop else exit endif enddo i=6 p=60 for a=s to 1 step-1 n=p for b=1 to 2*a-1 @i,p+1 say alltrim(str(a)) p=p-1 next i=i+1 p=n-1 next p=p+1 for a=1 to s n=p for b=1 to 2*a-1 @i,p+1 say alltrim(str(a)) p=p+1 next i=i+1 p=n-1 next wait space(20)+"您要继续吗Y/N"to d if upper(d)<>"Y" clear @10,40 say "谢谢!" wait " " time(2) return else loop endif enddo Return 二、别出心裁的图形 do while .t. clear input"请输入2-8之间的任意一个数n:"to n do while n>8 or n<=1 ?"输入的数字不在2和8之间,请重新输入!!!" input"请输入2-8之间的任意一个数n:"to n enddo i=6 p=29 q=31 @i,p+1 say 1 pict "9" for m=2 to n i=i+1 @i,q say m pict "9" @i,p say m pict "9" p=p-1 q=q+1 endfor p=p+2 q=q-2 for m=n-1 to 2 step-1 i=i+1 @i,p say m pict "9" @i,q say m pict "9" p=p+1 q=q-1 endfor @i+1,p say 1 pict "9" ? wait space(20)+"您要继续吗Y/N"to n if upper(n)="Y" .or. upper(n)<>"N" loop else exit endif enddo Return 三、缘分测试 ?"测试一下你们的缘分吧!" input"请输入你的姓名笔画数:"to a input"请输入他或她的姓名笔画数:"to b i=1 do while i<500 clea x=rand( y=100*x z=int(y) ?"缘分指数" ??z ??"%" i=i+1 enddo if z>80 ?"胡小强建议:哇!你们很有缘哦!把握机会!" else if z<50 ?"胡小强建议:不要灰心哦,还需努力啊!" else ?"胡小强建议:还是有希望哦,多多努力!" endif endif ? ?"再确认你们婚姻指数吧!" input"请输入你的出生日期(如20130508):"to a input"请输入他或她的出生日期:"to b i=1 do while i<500 clea x=rand() y=100*x z=int(y) ?"缘分指数" ??z ??"%" i=i+1 enddo ? ? ?"哈哈,这你都相信!" ?"笑死我了,哈哈哈哈哈!" ?"不要打我........" 四、奇异造型 g=-1

汇编数值转换器大作业解读

《汇编语言程序设计》 综合程序设计实验报告 题目:数制转换器 班级:信1101-2班 姓名:王兵茹李夏蕾 胡佳奇 学号:20112917 20112912 20113013 完成日期:2013-11-24

目录 一、简介 二、小组成员及具体分工 三、需求分析与设计 四、代码及分析 五、总结

一、简介 本设计利用汇编语言来实现数制转换设计,用于方便进制之间的互换。设计的内容可以使十六进制、八进制、二进制、十进制的数制互相转换。 二.小组成员及具体分工 小组成员:王兵茹李夏蕾胡佳奇 具体分工:我们三个一开始是各自的分工查资料,先看看单个数制转换,王兵茹负责的是十六进制,李夏蕾负责的是十进制,胡佳琪负责的是二 进制。 最后我们几个一起完成了程序的主要设计,由于大体思路相同,最后加上了八进制的转换。 在程序的修改方面,王兵茹进行了后期的加工,增加了dios中断,把单调的退出改成文本形式下的退出,在退出之前,执行清屏。 最后我们几个商量着完成了实验报告和ppt的制作,经过我们几个人的努力,虽然做的不是特别好,但还是各有收获。 三、需求分析与设计 ●需求分析 通过编程实现显示菜单,然后通过键盘输入菜单相应的选项进入相应的数制转换,然后通过选项对应的子程序跳转来实现转换,子程序中通过宏定义定义数制前后的数制,并且在宏定义过程中实现数制转换算法,最后输出转换后的进制数。 ●设计 ①运行的设计框图 ②整个系统的设计框图

③子程序之间调用关系框图 我们的这个程序主要就是用到的子程序的调用和大量的宏定义,对于输入时的宏定义有charin,strin,numin,输出时的宏定义有charout,strout,numout,输出的时候用到的是栈push和pop,在压栈push时,用到了irp不定重复伪操作。 定义通用inax宏,确定转换之前的进制,例如inax cx、cx=2是把转换之前的进制确定为2存到cx中 定义通用outax宏,确定转换之后的进制,例如outax bx、bx=2是把转换之后的进制确定为2存到bx中 通用宏charin逐个输入转换之前进制字符

汇编语言程序代码详细版

1.1 DATAS SEGMENT x db 6 y db 7 z db ? ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT dw 100 dup(0);此处输入堆栈段代码STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: push ds mov ax,0 push ax mov ax,datas mov ds,ax mov dl,x add dl,y mov cl,3 sal dl,cl sub dl,x sar dl,1 mov z , dl ;此处输入代码段代码 MOV AH,4CH INT 21H CODES ENDS END START 1.2DATAS SEGMENT x db 4 dup (0) y db 4 dup (0)

z db 4 dup (0) ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT dw 100 dup(0);此处输入堆栈段代码STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: mov x,12h mov [x+1],34h mov [x+2],56h mov [x+3],78h mov bl,78h mov y,34h mov [y+1],56h mov [y+2],87h mov [y+3],64h add bl,64h mov [z+3],bl mov bl,56h adc bl,87h mov [z+2],bl mov bl,34h adc bl,56h mov [z+1],bl mov bl,12h adc bl,34h mov z,bl

基础的汇编语言小程序

基础的汇编语言小程序 1.1 Hello World !程序(完整段) (注:所有的标点符号以及空格回车均为英文输入法状态下的,否则报错!) DATAS SEGMENT STRING DB ‘Hello World !’,13,10,’$’ DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21H CODES ENDS END START 1.2 Hello World !程序(简化段) .MODEL SMALL .DATA

STRING DB’Hello World !’,13,10,’$’ .STACK .CODE .STARTUP LEA DX,STRING MOV AH,9 INT 21H .EXIT END 2.1完整段的求3+5的和 DATA SEGMENT FIVE DB 5 DATAS ENDS STACKS SEGMENT DB 128 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CD:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AL,FIVE

ADD AL,3 ADD AL,30H MOV DL,AL MOV AH,2 MOV AH,4CH INT 21H CODES ENDS END START 2.2;简化段的求3+5的和.MODEL SMALL .DATA FIVE DB 5 .STACK DB 128 DUP (?) .CODE .STARTUP MOV AL,FIVE ADD AL,3 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H

汇编经典小程序(精编文档).doc

【最新整理,下载后即可编辑】 实验一:判断一个数X的正,负数,还是零。(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !) DATA SEGMENT X DB 10 CR EQU 0DH LF EQU 0AH W DB 'This is a zore!',CR,LF,'$' ZHENG DB '+',CR,LF,'$' FU DB '-',CR,LF,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X AND AL,AL JZ L1 SHL AL,1 JC L3 JMP L2 L1: MOV DX,OFFSET W MOV AH,9 INT 21H JMP L4 L2: MOV DX,OFFSET ZHENG MOV AH,9 INT 21H JMP L4 L3: MOV DX,OFFSET FU MOV AH,9 INT 21H

L4: MOV AH,4CH INT 21H CODE ENDS END START 实验二:求十个数中的最小数,并以十进制输出。(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法)DATA SEGMENT XDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09H MIN DB ? CR EQU 0DH LF EQU 0AH W DB ' is min',CR,LF,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,9 MOV SI,OFFSET XDAT MOV AL,[SI] L2: CMP AL,[SI+1] JC L1 MOV AL,[SI+1] L1: INC SI LOOP L2 ADD AL,30H MOV DL,AL MOV AH,2

代码转换汇编

二进制编码的十进制数,简称BCD码(Binarycoded Decimal). 这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符。4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0,1,2,3,4,5,6,7,8,9 这十个数符。最常用的BCD码称为8421BCD码,8.4.2.1 分别是4位二进数的位取值。点击此处将给出十进制数和8421BCD编码的对应关系表。 1、BCD码与十进制数的转换 BCD码与十进制数的转换.关系直观,相互转换也很简单,将十进制数75.4转换为BCD码如: 75.4=(0111 (0101.0100)BCD 若将BCD码1000 0101.0101转换为十进制数如: (1000 0101.0101)BCD=85.5 注意:同一个8位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。 例如:00011000,当把它视为二进制数时,其值为24;但作为2位BCD码时,其值为18。 又例如00011100,如将其视为二进制数,其值为28,但不能当成BCD码,因为在8421BCD 码中,它是个非法编码 . 2、BCD码的格式 计算机中的BCD码,经常使用的有两种格式,即分离BCD码,组合BCD码。 所谓分离BCD码,即用一个字节的低四位编码表示十进制数的一位,例如数82的存放格式为: _ _ _1 0 0 0 _ _ _ _0 0 1 0 其中_表示无关值。 组合BCD码,是将两位十进制数,存放在一个字节中,例82的存放格式是1000 0010 3、BCD码的加减运算 由于编码是将每个十进制数用一组4位二进制数来表示,因此,若将这种BCD码直接交计算机去运算,由于 计算机总是把数当作二进制数来运算,所以结果可能会出错。例:用BCD码求38+49。 解决的办法是对二进制加法运算的结果采用"加6修正,这种修正称为BCD调整。即将二进制加法运算的结果修正为BCD码加法运算的结果,两个两位BCD数相加时,对二进制加法运算结果采用修正规则进行修正。修正规则: (1)如果任何两个对应位BCD数相加的结果向高一位无进位,若得到的结果小于或等于9, 则该不需修正;若得到的结果大于9且小于16时,该位进行加6修正。 (2)如果任何两个对应位BCD数相加的结果向高一位有进位时(即结果大于或等于16),该位进行加6修正. (3)低位修正结果使高位大于9时,高位进行加6修正。 下面通过例题验证上述规则的正确性。 用BCD码求35+21 BCD码求25+37 用BCD码求38+49 用BCD码求42+95 用BCD码求91+83 用BCD码求94+7 用BCD码求76+45 两个组合BCD码进行减法运算时,当低位向高位有借位时,由于"借一作十六"与"借一作十"的差别,将比正确的结果多6,所以有借位时,可采用"减6修正法"来修正.两个BCD码进行加减时,先按二进制加减指令进行运算,再对结果用BCD调整指令进行调整,就可得到正确的十进制运算结果。实际上,计算机中既有组合BCD数的调整指令,也有分离BCD数的调整指

汇编源代码

实验四 用一般指令实现 SSEG SEGMENT STACK ;定义堆栈段 STK DB 20 dup(0);堆栈段有20字空间 SSEG ENDS ;堆栈段结束 DSEG SEGMENT ;定义数据段 DA TA DB 110,160,80,45,200,100,50 CNT DW 7 MEGY DB ‘Y$’ MEGN DB ‘N$’ DSEG ENDS ;数据段结束 CSEG SEGMENT ;定义代码段 ASSUME DS:DSEG,CS:CSEG ASSUME SS:SSEG,ES:ESEG START: MOV AX,DSEG ;建立DS段地址 MOV DS,AX MOV ES,AX MOV AX,SSEG MOV SS,AX MOV SP,SIZE STK LEA DI,DA TA MOV CX,CNT CLD MOV AL,100 LEA DX,MEGY ;把Y送入dx REPNZ SCASB ;如果没有和al里面100相等的数则重复搜索 JZ DISP ;如果ZF标志位为1,则会进行跳转,直接 输出dx内容 LEA DX,MEGN DISP: MOV AH,9 INT 21H MOV AH,4CH INT 21H CSEG ENDS ;代码段结束 END START ;汇编结束,同时指明程序起始点

用数据串指令实现 SSEG SEGMENT STACK ;定义堆栈段 STK DB 20 DUP(0);堆栈段有20字空间 SSEG ENDS ;堆栈段结束 DSEG SEGMENT ;定义数据段 DA TA DB 100,1,2 CNT DW 3 MEGY DB ‘Y$’ MEGN DB ‘N$’ DSEG ENDS ESEG SEGMENT ;定义附加段 ESEG ENDS CSEG SEGMENT ;定义代码段 ASSUME CS:CSEG,DS:DSEG ASSUME SS:SSEG,ES:ESEG START: MOV AX,DSEG ;建立ds段地址 MOV DS,AX MOV ES,AX MOV AX,SSEG ;建立ss段地址 MOV SS,AX ;建立es段地址 MOV SP,LENGTH STK ;设置堆栈指针 MOV CX,WORD PTR CNT MOV DI,OFFSET DA TA MOV AL,100 CLD XH: SCASB LEA DX,MEGY JE DISP ;数据串指令查找数据 LOOP XH ;循环 LEA DX,MEGN ;没有100,把N送入DL DISP: MOV AH,9 INT 21H MOV AH,4CH INT 21H CSEG ENDS END START

基本演示汇编语言实验操作方法

基本演示1汇编语言实验操作方法 一.实验的基本方法(MASM宏汇编子目录下) 1.在DEBUG下运行汇编指令或简单小程序 在DEBUG提示符下,用汇编命令A:输入汇编指令或简单小程序,用单步命令T 或全程命令G来执行,并检查执行中间结果与最后结果。 2.标准汇编程序上机方法 A.建立ASM文件,用https://www.wendangku.net/doc/6a3906558.html,全屏幕编辑文件或其他编辑文件建立扩展名为ASM的源程序. B.用MASM(或ASM)产生扩展名为OBJ目标文件。 C.用LINK产生扩展名为EXE可执行文件。 D.在DEBUG下,把文件调入内存,调试程序。 E.在DOS下可直接执行扩展名为EXE的文件。(详细过程) 二.汇编语言的工作环境. A.硬件环境 IBM-PC及其系列机 内存256K字节以上 外存:硬盘或至少一个软驱 CPU:80586以上 显示器:单色或彩色显示器 键盘:标准ASCII码键盘 B.软件环境 编缉程序:https://www.wendangku.net/doc/6a3906558.html,或其他编缉程序 汇编程序:MASM.EXE或ASM.EXE 连接程序:LINK.EXE 调试程序:https://www.wendangku.net/doc/6a3906558.html,或DEBUG.EXE

A命令 在命令A后跟地址,按回车输入程序,可以连续输入,当按下回车后,就退回到DEBUG下。 T命令

T命令为跟踪命令。 G命令 该地址指定了运行的起始地址,如不指定则从当前的cs:ip开始运行EDIT.EXE

怎样生成.exe文件

生成.obj文件

基本演示2DEBUG命令的使用 A.程序调用命令 C>DEBUG[D:][PATH][FILENAME[.EXT]][PARM1][PARM2] 其中,文件名是被调试文件的名字。如未键入文件名。可用DEBUG命令N和L 把需要文件装入存储器后再调试。D指定驱动器,PATH为路径,FILENAME为文件名,PARM为命令参数 B.显示存储单元命令 -D[ADDRESS]或;ADDRESS地址 -D[RANGE];RANGE范围 C.修改存储单元内容命令 -E ADDRESS[LIST] D.检查和修改寄存器内容命令 -R[REGISTER NAME];Register name寄存器名字 E.汇编命令 -A[ADDRESS] F.跟踪命令 -T[=ADDRESS][VALUE];Value变量值 G.运行命令 -G[=ADDRESS][ADDRESS2[ADDRESS3] H.反汇编命令 -U[ADDRESS] -U[RANGE]

汇编实现大小写字母转换程序

一、题目要求 编写程序,接收键盘输入的字符串,将其中大写字母转化为小写字母,并显示转化后的字符串。键盘输入的字符串存于STRBUF缓冲区中,最多输入30个字符。 二、实现原理 字符串是由若干个字符构成,而字符在计算机中以ASCII码形式存储,因此字符串是一个ASCII码序列。小写字符’a’…’z’的ASCII是61H~7AH,大写字符A’…’Z’的ASCII是41H~5AH,因此将大写字母转化为小写字母的方法是:大写字母ASCII加上20H。 三、实验程序及流程图 程序首先调用0A号功能,等待用户输入字符串,并存入STRBUF中。然后对输入字符逐个检测,若为大写字符,则将其转化为小写字符,否则不变。最后采用循环结构,使用02号调用,逐个显示字符串中的字符。流程图如图4.11所示。 –1–

图4.11 程序流程图 程序代码如下。 DATA SEGMENT STRBUF DB 30,?,31 DUP (?) ;定义键盘接收缓冲区DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: –2–

第27章单片机实现密码锁MOV AX,DA TA MOV DS,AX LEA DX,STRBUF MOV AH,0AH INT 21H ;0A号调用,等待用户输入字符串 MOV CL,STRBUF+1 CMP CL,00 JZ EXITP MOV CH,00H MOV SI,2 XX1: MOV AL,STRBUF[SI] ;读取一个字符 CMP AL,’A’ JB NEXT CMP AL,’Z’ JA NEXT ;判断是否是大写字符,ASCII在41H~5AH之间 ADD STRBUF[SI],’a’-‘A’;大写字母ASCII值加20H NEXT: INC SI LOOP XX1 MOV DL,0AH MOV AH,02H INT 21H ;控制换行 MOV CH,00 MOV CL,STRBUF+1 MOV SI,2 XX2: MOV DL,STRBUF[SI] MOV AH,02H INT 21H INC SI LOOP XX2 ;显示字符串 EXITP: MOV AH,4CH INT 21H CODE ENDS END START –3–

汇编语言代码

汇编语言编写从键盘输入一段字符串然后逆序输出DATA SEGMENT DB 512 DUP('$') ;定义可输入的字符个数 BUF DB '$' CRLF DB 0DH,0AH,24H ;回车换行符 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,OFFSET BUF ;指针指向待显示字符串尾部AGAIN: MOV AH,01 ;输入字符 INT 21H CMP AL,0DH ;是回车吗 JE DISP ;是,转显示 DEC BX ;指针减1 MOV [BX],AL ;存入输入的字符 JMP AGAIN ;继续输入 DISP: MOV AH,09 ;显示 MOV DX,OFFSET CRLF ;回车换行 INT 21H MOV DX,BX ;定位待显示字符串首地址 MOV AH,09 INT 21H ;显示 MOV AH,4CH ;DOS返回 INT 21H CODE ENDS END START

; 本程序通过编译,运行正确 Code Segment Assume CS:Code,DS:Code ; ----------------------------------------- ; 功能:显示指定地址(Str_Addr)的字符串 ; 入口: ; Str_Addr=字符串地址(要求在数据段) ; 用法: Output Str_Addr ; 用法举例:Output PromptStr Output MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM ; ----------------------------------------- ; 功能:输出一个字符 ; 入口:dl=要显示的字符 Enter_Chr proc Near push ax mov ah,02h int 21h pop ax ret Enter_Chr endp ; ----------------------------------------- ; 功能:输出回车换行 Enter_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx

24个汇编实例小程序

24个汇编小程序 题目列表: 逆序输出字符串“BASED ADDRESSING” 从键盘上输入两个数,分别放到x,y单元,求出它们的和 试编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域 键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出 从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符 把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来 求出首地址为data的100个字数组中的最小偶数,并把它放在ax中 输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match” 从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果 有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零 从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0 在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f分别考虑有符号数、无符号数情况) 一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中 设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存放在S 单元,若其中有一个数为0,则把其它两个单元也清零。请编写此程序

汇编经典代码

1.顺序程序设计 将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。 DATA SEGMENT DATA1 DB 34H,35H,39H,38H,36H,' ' ;被加数 DATA2 DB 37H,34H,33H,36H,32H,' ' ;加数 DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,DATA1 ;有效地址送SI,为调用显示子程序做准备 CALL DISPLAY ;调用显示子程序 CALL CRLF ;调用回车换行子程序 LEA SI,DATA2 ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备 CALL DISPLAY ;调用显示子程序 CALL CRLF ;调用回车换行子程序 LEA DI,DATA1 ;有效抵制送DI,为加法运算做准备 MOV AX,0 MOV BX,0 MOV CL,05H ;记录循环次数 ADDS: MOV AL,[SI] ;将加数送往AL SUB AL,30H ADD AL,BL ;加上进位 MOV BL,[DI] ;将被加数送往BL SUB BL,30H ADD AL,BL ;加法运算 ADD AL,30H CMP AL,3AH JA SUBA ;结果>=10,跳到SUBA JB NSUBA SUBA: SUB AL,0AH ;减去10的值,并置BL为1 MOV BL,01H JMP CONTINUE NSUBA: MOV BL,00H ;置BL为0 CONTINUE:MOV [DI],AL ;将相加的结果从AL送往DI的地址,即DATA1的地址INC DI ;地址加1 INC SI ;地址加1 LOOP ADDS ;循环 JC SHUCHU JNC SHUCHU2 SHUCHU2: MOV AL,31H ;CF为1设置结果最高位为1 JMP CONTINUE2 SHUCHU:MOV AL,30H ;CF为0设置结果最高位为0

汇编课程设计成绩管理系统+源代码

XXXXX 课程设计说明书 汇编语言课程设计 班级: 网络B101 姓名: XXX 学号XXX 设计题目: 学生成绩管理 设计时间: 2012.12.09 至2012.12.21 指导教师: XXX 评语:_______________________________ _______________________________________ _______________________________________ _______________________________________ _______________________________________ 评阅成绩:___________评阅教师:____________ 一、课程设计的目的

进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。二、设备与环境 PC兼容机、Windows操作系统、汇编程序masm for windows 2010 三、课程设计要求 1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。 2.遵循模块化、结构化的程序设计方法。 3.要求程序必须正确。 4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。 5.要求程序结构合理,语句使用得当。 6.适当追求编程技巧和程序运行效率。 四、课程设计的课题和分析 题目:学生成绩管理 分析:建立学生成绩文档;输入学生各门功课成绩;(假设3门功课);修改指定学号的学生成绩;统计指定学号的学生的平均成绩、总成绩,并在屏幕上显示;统计指定学号课程的平均成绩,并在屏幕上显示;每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数;(分数段为:>=90;80~89;70~79;60~69;<=59)此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。对学生成绩记录进行检索(按学号、姓名), 成绩排序(按总成绩降序排列), 退出,最好用到文件处理。 五、流程图、总体设计、详细设计 学生成绩管理,最基本能实现的的功能是输入学号,同时显示该学生的基本的信息,我设计的成绩管理系统功能还包括了显示该生的语文,英语,数学三门学科的成绩,求出了该生的总分,以及该生的平均分,动态输入学生的成绩,而且成绩是按照三位数显示的,可以输入任意多的学生人数,每个学生都是三门课程,最后统计输入所有学生的各科各个分数段的人数,最后显示出所有学生的成绩排名情况。为了使系统更实际一些,我设计的系统包括建立了文件,方便学生

汇编语言,led点亮

《单片机应用设计》课程设计 专业:自动化 姓名: 学号: 同组人员: 指导教师: 日期:

单片机应用设计课程设计 设计题目 1个按键:无按键时,8个LED全亮,按下1次,8个Led依次点亮,持续1S。连续按两次,8个Led以相反的次序依次点亮。

单片机应用设计课程设计 第一部分系统设计分析 硬件分析 1.LED灯采用共阳极接法,本题中则将P1口对应各位赋低电平即可点亮LED灯。 2.p 3.5接按键。 软件分析 第二部分硬件电路设计及实现

单片机应用设计课程设计 第三部分软件设计 ORG 0000H LJMP MAIN ;中断入口 ORG 000BH LJMP DIER KEY BIT P3^4 LED EQU P1 MAIN: MOV R2,#0 ;R2清零 MOV LED,#0 ;八个二极管全亮 MOV R3,#10 MOV TMOD,#01H;选择定时器0的定时器方式1 ;赋初值3CB0H即15536 MOV TL0,#0B0H MOV TH0,#3CH SETB EA ;打开总中断 SETB ET0 ;允许定时器0中断 ;第一次按键检测 KEY_SCAN:JNB KEY, YN1 ;为零则转移,即为按下 AJMP KEY_SCAN YN1:LCALL DEL1MS JNB KEY,Y1 ;判断是否真的按下,真的按下了,则转移 AJMP KEY_SCAN Y1:LCAL L DEL1MS JB KEY,SSH ;检测是否松手,松手转移 AJMP Y1 SSH:SETB TR0 ;打开定时器0 CJNE R2,#1,$ ;检测R2是否为一,不为一则等待 CLR TR0 ;关闭定时器 AJMP MAIN ;跳回主程序 ;第二次键盘检测,每50ms检测一次,检测10次,即为500ms DIER:JNB KEY, LED_2 ;检测键盘是否按下,按下则转移 DJNZ R3,CZ ;R3减一是否为零,不为零则转移 AJMP LED_1 ;延迟500ms后没有第二次按下,跳到LED_1 LED_1:MOV R4,#8 MOV A,#0FEH ;LED顺序循环程序 LOOP1:MOV LED,A LCALL DEL1S

8086汇编经典例程

========================================== 5.编写一个数组排序(从小到大)的小程序,数组在程序中定义,程序先将原数组显示一遍,然后排序,再将排好序的数组显示一遍。 ========================================== AAA SEGMENT BUF DB '45$' L = $ - BUF ary dw -897,345,6789,8654,-1234, -3456,-99,-678,987,567, 32762,-12121,0,3434,4645,-234, 23455,-100,100,1000,-1000 dw 572,-2345,-6543,-1234,9999 | len dw ($-ary)/2 ASSUME CS:AAA, DS:AAA MAIN PROC FAR PUSH CS POP DS LEA SI,ARY MOV CX,LEN NEXT3: MOV BX,[SI] CALL DISP CALL SPACE - ADD SI,2 LOOP NEXT3 CALL CRLF CALL CRLF LEA SI,ARY MOV CX,LEN CALL SORT LEA SI,ARY MOV CX,LEN NEXT5: MOV BX,[SI] CALL DISP … CALL SPACE ADD SI,2 LOOP NEXT5 MOV AH,4CH INT 21H MAIN ENDP DISP PROC PUSH SI PUSH AX PUSH BX ! PUSH DX PUSH CX MOV CX,0 CMP BX,0 JNL NEXT1 NEG BX MOV CX,1 NEXT1: LEA SI,BUF+l-1 MOV AX,BX MOV BX,10 NEXT: MOV DX,0 } DIV BX ADD DL,30H DEC SI MOV [SI],DL CMP AX,0 JNE NEXT CMP CX,0 JE NEXT2 DEC SI MOV BYTE PTR [SI],'-' NEXT2: MOV DX,SI ! MOV AH,9 INT 21H POP CX POP DX POP BX POP AX POP SI RET DISP ENDP SORT PROC ( NEXTT: PUSH CX MOV DI,SI MOV AX,[SI] NEXT0: CMP AX,[DI] JL NEXTQ MOV BX,AX MOV AX,[DI] MOV [DI],BX NEXTQ: ADD DI,2 LOOP NEXT0 MOV [SI],AX … ADD SI,2 POP CX LOOP NEXTT RET SORT ENDP CRLF PROC PUSH AX PUSH DX MOV DL,13

相关文档