24个汇编实例小程序
8086汇编经典例程

==========================================5.编写一个数组排序(从小到大)的小程序,数组在程序中定义,程序先将原数组显示一遍,然后排序,再将排好序的数组显示一遍。
==========================================AAA SEGMENTBUF DB '45$'L = $ - BUFary dw -897,345,6789,8654,-1234,-3456,-99,-678,987,567,32762,-12121,0,3434,4645,-234,23455,-100,100,1000,-1000dw 572,-2345,-6543,-1234,9999|len dw ($-ary)/2ASSUME CS:AAA, DS:AAAMAIN PROC FARPUSH CSPOP DSLEA SI,ARYMOV CX,LENNEXT3: MOV BX,[SI]CALL DISPCALL SPACE-ADD SI,2LOOP NEXT3CALL CRLFCALL CRLFLEA SI,ARYMOV CX,LENCALL SORTLEA SI,ARYMOV CX,LENNEXT5: MOV BX,[SI]CALL DISP…CALL SPACEADD SI,2LOOP NEXT5MOV AH,4CHINT 21HMAIN ENDPDISP PROCPUSH SIPUSH AXPUSH BX!PUSH DXPUSH CXMOV CX,0CMP BX,0JNL NEXT1NEG BXMOV CX,1NEXT1: LEA SI,BUF+l-1MOV AX,BXMOV BX,10NEXT: MOV DX,0}DIV BXADD DL,30HDEC SIMOV [SI],DLCMP AX,0JNE NEXTCMP CX,0JE NEXT2DEC SIMOV BYTE PTR [SI],'-'NEXT2: MOV DX,SI!MOV AH,9INT 21HPOP CXPOP DXPOP BXPOP AXPOP SIRETDISP ENDPSORT PROC(NEXTT: PUSH CXMOV DI,SIMOV AX,[SI]NEXT0: CMP AX,[DI]JL NEXTQMOV BX,AXMOV AX,[DI]MOV [DI],BXNEXTQ: ADD DI,2LOOP NEXT0MOV [SI],AX…ADD SI,2POP CXLOOP NEXTTRETSORT ENDPCRLF PROCPUSH AXPUSH DXMOV DL,13MOV AH,2|INT 21H MOV DL,10 INT 21H POP DXPOP AXRET CRLF ENDPSPACE PROCPUSH AXPUSH DX】MOV DL,' 'MOV AH,2INT 21HPOP DXPOP AXRETSPACE ENDPAAA ENDSEND MAIN===============================================6.!7.编写一个程序,从键盘输入10个十进制数字字符,然后将这些数字加密存储在缓冲区BUFFER中。
六个简单实用的c++小程序

阶乘#include<stdio.h>#include<stdlib.h>main(){long int a,b,c;printf("请输入一个正整数:\n");scanf("%d",&a);if (a<=0){printf("Error.\n");system("pause");}b=0;c=1;do{b++;c=b*c;}while(b!=a);printf("%d\n",c);system("pause");}判断质数合数#include<stdio.h>#include<stdlib.h>main(void){int a,b,c;printf("请输入一个大于一的整数:\n");scanf("%d",&a);if (a<=1){printf("Error.\n");system("pause");}b=1;do{b++;c=a%b;}while(c!=0);if (a==b){printf("质数\n");}else{printf("合数\n");}system("pause");}质数表#include<stdio.h> #include<stdlib.h> main(void){int a,b,c;a=1;do{a++;b=1;do{b++;c=a%b;}while(c!=0);if (a==b){printf("%d\n",a);}}while(a!=0); system("pause");}求约数的个数与约数和#include<stdio.h>#include<stdlib.h>main(){int a,b,c,d,e;printf("请输入一个正整数:\n");scanf("%d",&a);if (a<1){printf("Error.\n");system("pause");}else{b=0;d=0;e=0;do{b++;c=a%b;if (c==0){d++;e+=b;}}while(a!=b);printf("约数的个数:%d\n约数和:%d\n",d,e);system("pause");}}表示a~b中含有c的数的个数和c出现的次数#include<stdio.h>#include<stdlib.h>main(void){long int a,b,c,d,e,f,g,h,i,j,k,l,m;printf("请输入三个自然数,表示a~b中含有c的数的个数和c出现的次数:\n");printf("(a<b,c为一位自然数,最多为五位数)\n");scanf("%d,%d,%d",&a,&b,&c);if (a>=b||a<0){printf("Error.\n");system("pause");}if (c>=10||c<0){printf("Error.\n");system("pause");}else{d=0;e=0;do{f=a%10000;g=(a-f)/10000;h=f%1000;i=(f-h)/1000;j=h%100;k=(h-j)/100;l=j%10;m=(j-l)/10;if (g==c){e++;}if (i==c){e++;}if (k==c){e++;}if (m==c){e++;}if (l==c){e++;}if (g==c||i==c||k==c||m==c||l==c){d++;}a++;}while(a!=b+1);printf("a~b中含有c的数的个数:%d\nc出现的次数:%d\n",d,e);system("pause");}}排列组合#include<stdio.h>#include<stdlib.h>int stair(int n){if(n<0){printf("Error\n");return-1;}else if(n<=1)return 1;elsereturn(n*stair(n-1));}main(){int m,n,a,b;printf("请输入两个正整数:\n");printf("第一个数必须大于等于第二个数:\n"); printf("这两个数之间应该用逗号连接:\n"); printf("这两个数表示P a,b= C a,b=\n");scanf("%d,%d",&m,&n);if(m*n<1){printf("Error\n");system("pause");}if(n>m){printf("Error\n");system("pause");}else{a=stair(m)/stair(m-n);b=stair(m)/stair(m-n)/stair(n);printf("P a,b=%d\nC a,b=%d\n",a,b);system("pause");}}。
汇编语言程序经典案例100例

当然可以帮你制作PPT!以下是关于《汇编语言程序经典案例 100例》的一份PPT大纲,以Markdown代码框的形式展示。你 可以根据这个大纲,进一步丰富内容,使其达到最少2500字 。
```markdown 汇编语言程序经典案例100例
01 汇编语言程序经典案例100例
案例六:汇编游戏
实现一个简单的汇编游戏,如猜数字或打砖块 结合图形和用户输入,展示汇编语言的实际应用
案例七:汇编与硬件交互
编写控制硬件设备的汇编程序,如LED显示控制 探讨汇编语言与底层硬件交互的原理和方法
案例八:内存管理
展示如何在汇编中进行内存分配和释放 解释堆栈、堆区和数据段的概念及其在汇编中的应用
汇编语言程序经典案例100例
案例一:Hello, World! 案例二:计算器 案例三:字符逆序 案例四:素数判断 案例五:文件操作 案例六:汇编游戏 案例七:汇编与硬件交互 案例八:内存管理 案例九:中断处理 案例十:多任务处理
案例一:Hello, World!
使用汇编语言编写经典的Hello, World!程序 解释程序的结构和汇编指令
案例二:计算器实现一个Fra bibliotek单的计算器程序,支持加减乘除运算 展示汇编中的数值处理和条件分支
案例三:字符逆序
编写程序将输入的字符串逆序输出 探讨字符串处理和循环结构在汇编中的应用
案例四:素数判断
判断输入的数字是否为素数 展示如何进行数值计算和判断,并介绍汇编中的位操作
案例五:文件操作
创建、读取、写入文件的汇编程序 分享文件操作所涉及的系统调用和汇编指令
案例九:中断处理
编写处理外部中断的汇编程序 探讨中断的概念、处理流程以及在汇编中的实现
Linux下简单C语言小程序的反汇编分析

Linux下简单C语⾔⼩程序的反汇编分析韩洋原创作品转载请注明出处《Linux内核分析》MOOC课程写在开始,本⽂为因为参加MOOC相关课程⽽写的作业,如有疏漏,还请指出。
选了⼀门Linux内核分析课程,因为阅读内核代码中或多或少要涉及到At&T汇编代码的阅读,所以这⾥写下⼀个对⼀个简单C命令⾏程序的反汇编分析过程,⼀⽅⾯完成作业,另⼀⽅⾯当作练⼿。
下⾯开始:1、编写我们的C语⾔⼩程序这⾥我们使⽤简单的例⼦,代码如下:1 #include <stdio.h>23int exG(int x)4 {5return x + 5;6 }78int exF(int x)9 {10return exG(x);11 }1213int main(void)14 {15return exF(10) + 2;16 }使⽤vim等编辑器写⼊上述代码,保存到main.c,然后使⽤下⾯命令⽣成汇编源⽂件:x86系统:$gcc -S -o main.s main.cx64系统:$gcc -m32 -S -o main.s main.c因为我们这⾥以32位平台为例⼦,所以在x64机器上要加上-m32来使GCC⽣成32位的汇编源⽂件。
2、处理源⽂件执⾏完上述命令后,当前⽬录下就会有⼀个main.s的⽂件,使⽤vim打开,不需要的链接信息[以"."开头的⾏],得到如下汇编代码:1 exG:2 pushl %ebp3 movl %esp, %ebp4 movl 8(%ebp), %eax5 addl $5, %eax6 popl %ebp7 ret8 exF:9 pushl %ebp10 movl %esp, %ebp11 pushl 8(%ebp)12 call exG13 addl $4, %esp14 leave15 ret16 main:17 pushl %ebp18 movl %esp, %ebp19 pushl $1020 call exF21 addl $4, %esp22 addl $2, %eax23 leave24 ret可以看到这个⽂件⾥是GCC帮我们⽣成的汇编代码,这⾥需要说明下AT&T格式和intel格式,这两种格式GCC是都可以⽣成的,如果要⽣成intel格式的汇编代码,只需要加上 -masm=intel选项即可,但是Linux下默认是使⽤AT&T格式来书写汇编代码,Linux Kernel代码中也是AT&T格式,我们要慢慢习惯使⽤AT&T格式书写汇编代码。
python小程序200例

python小程序200例Python是一种面向对象、解释型的高级程序语言,其开发的应用范围非常广泛。
Python语言的特点主要表现在代码简洁、易读易写、可移植性强等方面。
本文将对Python的小程序100例进行介绍,以帮助初学者更好地掌握语言的基础知识。
1.打印“Hello, World!”print("Hello, World!")2.计算并打印1+2+……+10的值total=0for i in range(1,11):total+=iprint("1+2+……+10的值为:%d" %total)3.输入一个年份,判断是否为闰年year=int(input("请输入一个年份:"))if (year%4==0 and year%100!=0) or year%400==0:print("%d 是闰年" %year)else:print("%d 不是闰年" %year)4.输入两个数字,计算它们的乘积a=int(input("请输入第一个数字:"))b=int(input("请输入第二个数字:")) product=a*bprint("它们的乘积为:%d" %product) 5.从列表中找出最大的数list=[5,6,7,8,9,11,2,21,44]max_number=max(list)print("最大的数为:%d" %max_number) 6.输入一段字符串,判断它是否为回文串str=input("请输入一段字符串:")if str==str[::-1]:print("%s 是回文串" %str)else:print("%s 不是回文串" %str)7.生成指定范围内的随机数import randomrandom_number=random.randint(0,100)print("生成的随机数为:%d" %random_number) 8.计算1到100之间的偶数和total=0for i in range(1,101):if i%2==0:total+=iprint("1到100之间的偶数和为:%d" %total) 9.输入一个数,判断它是否为质数number=int(input("请输入一个正整数:"))if number<=1:print("%d 不是质数" %number)else:for i in range(2,number):if number%i==0:print("%d 不是质数" %number)breakelse:print("%d 是质数" %number)10.输入一个数n,输出1到n之间的所有质数def is_prime(n):if n<=1:return Falsefor i in range(2,n):if n%i==0:return Falsereturn Truen=int(input("输入一个正整数n:"))primes=[]for i in range(2,n+1):if is_prime(i):primes.append(i)print("1到%d之间的所有质数为:" %n,primes) 11.输出n的阶乘def factorial(n):if n==1:return 1else:return n*factorial(n-1)n=int(input("输入一个正整数n:"))print("%d的阶乘为:%d" %(n,factorial(n)))12.输入一个字符串,统计其中的单词数str=input("输入一段字符串:")words=str.split()print("其中的单词数为:%d" %len(words))13.判断两个字符串是否相等str1=input("请输入第一个字符串:")str2=input("请输入第二个字符串:")if str1==str2:print("两个字符串相等")else:print("两个字符串不相等")14.创建一个字典,存储学生的姓名、年龄、分数等信息student={"name":"张三","age":23,"score":89.5}print("学生姓名:%s,年龄:%d,分数:%.2f" %(student["name"],student["age"],student["score"])) 15.输入一个列表,将其反转后输出list=[1,2,3,4,5]list_reversed=list[::-1]print("经过反转的列表为:",list_reversed)16.生成斐波那契数列def fibonacci(n):if n==1 or n==2:return 1else:return fibonacci(n-1)+fibonacci(n-2)n=int(input("输入生成斐波那契数列数目:"))for i in range(1,n+1):print(fibonacci(i),end=" ")17.将一个列表合并成字符串list=["Python","is","easy"]str=" ".join(list)print(str)18.计算1000到2000之间的闰年for i in range(1000,2001):if (i%4==0 and i%100!=0) or i%400==0: print("%d是闰年" %i)19.输入一个数n,输出前n个斐波那契数列n=int(input("输入正整数n:"))fib=[1,1]for i in range(2,n):fib.append(fib[i-1]+fib[i-2])print(fib)20.输入两个数a,b,计算a的b次方a=float(input("请输入底数:"))b=float(input("请输入指数:"))result=a**bprint("a的b次方为:",result)21.打印出九九乘法表for i in range(1,10):for j in range(1,i+1):print("%d*%d=%d" %(j,i,i*j),end=" ") print()22.将一个列表的数据复制到另一个列表list1=[1,2,3,4,5]list2=list1[:]print("list1:",list1)print("list2:",list2)23.输入一个字符串,逆序输出str=input("请输入一段字符串:")str_reversed=str[::-1]print("输入的字符串逆序输出为:",str_reversed) 24.将一个列表中的所有元素去重list=[1,2,3,1,4,2,5,3]list_new=list(set(list))print("去重后的列表为:",list_new)25.检查两个字符串是否为互为回文str1=input("请输入第一个字符串:")str2=input("请输入第二个字符串:")if str1==str2[::-1]:print("两个字符串互为回文")else:print("两个字符串不互为回文")26.求两个数的最大公约数def gcd(a,b):if b==0:return aelse:return gcd(b,a%b)a=int(input("输入第一个正整数:"))b=int(input("输入第二个正整数:"))print("%d和%d的最大公约数为:%d" %(a,b,gcd(a,b))) 27.求两个数的最小公倍数def lcm(a,b):return a*b//gcd(a,b)a=int(input("输入第一个正整数:"))b=int(input("输入第二个正整数:"))print("%d和%d的最小公倍数为:%d" %(a,b,lcm(a,b)))28.从列表中找出第二大的元素list=[1,2,3,4,5,6,7,8,9]list_new=list.copy()list_new.remove(max(list_new))print("第二大的元素为:",max(list_new))29.从列表中删除重复元素list=[1,2,3,1,4,2,5,3]list_new=[]for i in list:if i not in list_new:list_new.append(i)print("删除重复元素后的列表为:",list_new)30.生成20个随机整数,求其中的最大值和最小值import randomrandom_numbers=[random.randint(1,100) for i in range(20)]max_number=max(random_numbers)min_number=min(random_numbers)print("生成的20个随机整数中的最大值为:%d,最小值为:%d" %(max_number,min_number))31.输入一个字符串,输出其中所有的数字str=input("请输入一段字符: ")numbers=[n for n in str if n.isdigit()]print("该字符串中的数字有:",numbers)32.输入一个数n,输出n的阶乘末尾的0的个数def trailing_zeroes(n):count=0while n>0:n//=5count+=nreturn countn=int(input("请输入一个正整数: "))print("n的阶乘末尾的0的个数为: ",trailing_zeroes(factorial(n))) 33.得到从0到n的所有奇数def odd_numbers(n):return [i for i in range(n+1) if i%2!=0]n=int(input("请输入一个整数:"))print("0到%d之间的所有奇数为:" %n,odd_numbers(n))34.得到从0到n的所有偶数def even_numbers(n):return [i for i in range(n+1) if i%2==0]n=int(input("请输入一个整数:"))print("0到%d之间的所有偶数为:" %n,even_numbers(n))35.输入一个字符串,将其中的元音字母(a、e、i、o、u)替换为字符串“Vowel”str=input("请输入一个字符串: ")vowels="aeiou"new_str=""for i in str:if i.lower() in vowels:new_str+="Vowel"else:new_str+=iprint("替换后的字符串为: ",new_str) 36.计算一个数的平方根import mathnumber=float(input("请输入一个数: ")) if number<0:print("请输入正数")else:sqrt_number=math.sqrt(number)print("%0.2f的平方根为: %0.2f" %(number,sqrt_number)) 37.输入两个数a,b,交换它们的值a=int(input("请输入a的值:"))b=int(input("请输入b的值:"))a,b=b,aprint("交换后a的值为:%d,b的值为:%d" %(a,b)) 38.使用递归计算斐波那契数列def fibonacci(n):if n<=1:return nelse:return fibonacci(n-1)+fibonacci(n-2)n=int(input("请输入n: "))print("第%d个斐波那契数为:%d" %(n,fibonacci(n)))39.计算圆的面积import mathr=float(input("请输入圆的半径: "))area=math.pi*r**2print("圆的面积为:%0.2f" %area)40.将一个列表中的奇数和偶数分别存放到两个新的列表中list=[1,2,3,4,5,6,7,8,9]odd_list=[] #存放奇数even_list=[] #存放偶数for i in list:if i%2==0:even_list.append(i)else:odd_list.append(i)print("原始列表为:",list)print("奇数列表为:",odd_list)print("偶数列表为:",even_list)41.使用匿名函数计算两个数的和add=lambda a,b:a+bprint(add(3,4)) #输出742.对一个列表中的所有元素进行平方处理list=[1,2,3,4,5]square=[i**2 for i in list]print("列表中的元素平方后为:",square) 43.将一个列表中的元素转换为大写字母list=["Python","is","easy"]upper_list=[i.upper() for i in list]print("转换后的列表为:",upper_list)44.将一个列表中小于5的元素过滤掉list=[1,2,3,4,5,6,7,8,9]new_list=[i for i in list if i>=5]print("过滤掉小于5的元素后的列表为:",new_list) 45.判断一个字符串是否为数字def is_number(str):try:float(str)return Trueexcept ValueError:return Falsestr=input("请输入一个字符串: ")if is_number(str):print("%s是数字" %str)else:print("%s不是数字" %str)46.对于一个列表,去除其中重复的元素list=[1,2,3,1,4,2,5,3]list_new=list(set(list))print("去重后的列表为:",list_new)47.将一个列表中的所有元素相加list=[1,2,3,4,5]total=sum(list)print("列表中所有元素的和为:%d" %total) 48.检查两个字符串是否为同构字符串def is_isomorphic(s,t):if len(s)!=len(t):return Falsemapping={}used=set()for i in range(len(s)):if s[i] in mapping:if mapping[s[i]]!=t[i]:return Falseelse:if t[i] in used:return Falseelse:mapping[s[i]]=t[i]used.add(t[i])return Trues=input("请输入第一个字符串:") t=input("请输入第二个字符串:") if is_isomorphic(s,t):print("两个字符串是同构字符串") else:print("两个字符串不是同构字符串")49.找到列表中第一个不重复的元素list=[1,2,3,1,4,2,5,3]for i in list:if list.count(i)==1:print("第一个不重复的元素是:",i)break50.按指定规则将列表中的元素排序list=[("Tom",29),("Jack",30),("Jerry",26),("Marry",21)] def sort_key(item):return item[1]sorted_list=sorted(list,key=sort_key)print("按年龄排序后的列表为:",sorted_list)51.在一个字符串中查找最长的连续字符串str=input("请输入一个字符串:")longest_substring=""substr=""for i in range(len(str)-1):if str[i]<=str[i+1]:substr+=str[i]else:substr+=str[i]if len(substr)>len(longest_substring):longest_substring=substrsubstr=str[i+1]print("最长的连续字符串为:",longest_substring)52.按指定key值排序一个字典dict={"apple":10,"banana":5,"orange":4,"grape":7} sorted_dict={key:value for key,value in sorted(dict.items(), key=lambda x:x[1])}print("按照值排序的字典为:",sorted_dict) 53.计算两个列表的交集list1=[1,2,3,4,5]list2=[2,4,6,8,10]intersect=[i for i in list1 if i in list2]print("交集为:",intersect)54.判断一个字符串是否为回文def is_palindrome(s):s=s.lower()return s==s[::-1]s=input("请输入一个字符串:")if is_palindrome(s):print("是回文字符串")else:print("不是回文字符串")55.将一个列表中的元素倒序排列list=[1,2,3,4,5]reversed_list=list[::-1]print("倒序排列后的列表为:",reversed_list) 56.打印出常用的框架或包的版本import sysprint("Python版本为:",sys.version)import pandas as pdprint("pandas的版本为:",pd.__version__) import numpy as npprint("numpy的版本为:",np.__version__) import matplotlib as mplprint("matplotlib的版本为:", mpl.__version__) 57.将一个字符串翻转str=input("请输入一个字符串: ")reversed_str=str[::-1]print("翻转后的字符串为:",reversed_str) 58.使用递归计算一个数的阶乘def factorial(n):if n==1:return 1else:return n*factorial(n-1)n=int(input("请输入一个正整数:"))print("%d的阶乘为:%d" %(n,factorial(n))) 59.计算列表中所有数的平均值list=[1,2,3,4,5]average=sum(list)/len(list)print("列表中所有数的平均值为:",average)60.将一个字符串中的每个单词的首字母大写str="this is a sample string."title_str=str.title()print("首字母大写后的字符串为:",title_str)61.计算两个数的最大值def max_number(a,b):return a if a>b else ba=int(input("请输入第一个数字:"))b=int(input("请输入第二个数字:"))print("两个数的最大值为:%d" %max_number(a,b)) 62.将一个元组转换为列表tuple=(1,2,3,4)list=list(tuple)print("转换后的列表。
微信小程序成功案例

微信小程序成功案例微信小程序作为一种轻量级应用,已经成为了许多企业和个人开发者的首选。
它不仅可以在微信平台上快速传播,还可以提供丰富的功能和良好的用户体验。
下面,我们将介绍几个成功的微信小程序案例,希望能够给大家一些启发和借鉴。
首先,让我们来看一个餐饮行业的成功案例。
某餐厅开发了一个微信小程序,用户可以在小程序上浏览菜单、预订餐桌、在线支付等。
通过小程序,用户可以方便地了解菜品信息,选择就餐时间,并且无需等待即可享用美食。
这个小程序不仅提升了用户的就餐体验,还为餐厅带来了更多的订单和好评,成为了餐厅发展的一大利器。
其次,让我们来看一个零售行业的成功案例。
某家零售商开发了一个微信小程序,用户可以在小程序上浏览商品、下单购买、查看订单状态等。
通过小程序,用户可以随时随地购物,无需下载App或者打开网页,极大地提高了购物的便利性和效率。
这个小程序不仅为零售商带来了更多的销售额,还提升了用户的购物体验,成为了零售商的一大利润增长点。
最后,让我们来看一个教育行业的成功案例。
某家教育机构开发了一个微信小程序,学生和家长可以在小程序上预约课程、在线学习、查看成绩等。
通过小程序,学生和家长可以方便地了解课程安排,随时随地进行学习,还可以及时了解学习成绩和评价。
这个小程序不仅提升了教育机构的品牌形象,还提高了学生和家长的满意度,成为了教育机构的一大宣传利器。
通过以上案例的介绍,我们可以看到微信小程序在不同行业都取得了成功。
它不仅为企业带来了更多的商机,还提升了用户的体验和满意度。
因此,我们相信微信小程序在未来会有更广阔的发展空间,希望各行各业都能够充分利用微信小程序,为自己的发展注入新的动力和活力。
总结,微信小程序已经成为了许多企业和个人开发者的首选,通过以上案例的介绍,我们可以看到微信小程序在不同行业都取得了成功。
它不仅为企业带来了更多的商机,还提升了用户的体验和满意度。
因此,我们相信微信小程序在未来会有更广阔的发展空间,希望各行各业都能够充分利用微信小程序,为自己的发展注入新的动力和活力。
汇编语言程序设计(5)

例:
第 4 章 汇编语言程序设计简介
ORG 1000H
BUF1: DB 38H, 7FH, 80H
BUF2: DB 45H, 66H
ORG伪指令指定了标号BUF1的地址为1000H, 而DB伪 指令是将其后的二进制数表38H, 7FH, 80H依次存放在1000H, 1001H, 1002H 3 个连续单元之中, BUF2也是一个标号, 其地 址与前一条伪指令连续, 即1003H, 1004H地址单元中依次存 放 45H, 66H。
如果在程序中要多次使用到某一地址,由EQU指令将其赋值 给一个字符名称,一旦需要对其进行变动,只要改变EQU命 令后面的数字即可,而不需要对程序中涉及到该地址的所有 指令逐句进行修改。
13
第 4 章 汇编语言程序设计简介
注意, 由EQU等值的字符名称必须先赋值后使用,且 在同一个源程序中,同一个标号只能赋值一次。 例:
H)=10H。
18
第 4 章 汇编语言程序设计简介
六、BIT——位地址符号指令
指令功能为:将位地址赋值给指定的符号名称,通常用于位符 号地址的定义。
指令如下:
字符名称 BIT 位地址
例如,X1 BIT P1.0
汇编结果为将位地址P1.0赋给变量X1,即在程序中便可 使用X1代替位地址P1.0。
19
(c)多分支
30
第 4 章 汇编语言程序设计简介
2. 一般分支程序结构实例
【例5】 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
1 y 1
0
x0 x0 x0
31
第 4 章 汇编语言程序设计简介
程序如下:
START:
CJNE R0,#00H,SUL1
C语言程序设计 100个小程序代码

for(i=2;i<=k;i++)
if(x%i==0)break;
3
if(i>k) return(1); else return(0); } main() {int a,s=0,max=0; clrscr(); for(a=200;a<=998;a++) if(prime(a)&&prime(a+2)&&(a+2)>max)max=a+2; s=max+max-2; printf("%d",s); }
int prime(int x)
{ int i,k;
k=sqrt(x);
for(i=2;i<=k;i++)
if (x%i==0) break;
if (i>k) return(1);
else return(0); }
main()
{ int i,s=0;
int prime(int x);
for(i=200;i<=999;i++)
761#include<math.h> int prime(int x) {int i,k; k=sqrt(x); for(i=2;i<=k;i++)
1
if(x%i==0) break; if(i>k) return(1); else return(0); } main() {int a,b,c,i,n=0; clrscr(); for(i=800;i>=300;i--) { a=i/100; b=i%100/10; c=i%10; if((b+c)%10==a&&prime(i)) n++; if(n==1) break;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
24个汇编小程序题目列表:1.逆序输出字符串“BASED ADDRESSING”2.从键盘上输入两个数,分别放到x,y单元,求出它们的和3.是编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域4.键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出5.从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符7.把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来8.求出首地址为data的100个字数组中的最小偶数,并把它放在ax中9输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match”10从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数11从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果12有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零13.从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。
如有,则把cl的第五位置1,否则将该位置置014.在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f 分别考虑有符号数、无符号数情况)15.一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。
试编制一个程序,把既在A中又在B中出现的整数存放于数组C中16.设在A、B和D单元中分别存放着三个数。
若三个数都不是0,则求出三个数的和并存放在S单元,若其中有一个数为0,则把其它两个单元也清零。
请编写此程序17.从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示这三类的计数结果18.已定义两个整数变量A和B,试编写程序完成以下功能(1)若两个树种有一个是奇数,则将奇数存入A中,偶数存入B中(2)若两个数均为奇数,则将两个数加1后存回原变量(3)若两个数均为偶数,则两个变量均不变19.写一段子程序skiplines,完成输出空行的功能。
空行的行数由用户在主程序中通过键盘输入,并将行数放在ax寄存器中20.设有10个学生成绩分别是76, 69,84,73,88,99,63,100和80。
试编写一个子程序统计60-69分,70-79分,80-89分,90-99分和100分的人数,并分别放到S6,S7,S8,S9,S10单元中21.编写子程序嵌套结构的程序,把整数分别用二进制和八进制显示出来22.在D盘根目录建立一个文件abc.txt,第一次向文件写入“123456”六个字符,第二次增加“abcdefg”几个字符23从键盘上输入文本文件:“d:\temp.txt”的内容后,然后新建一个文件“d:\temp2.txt”,把前一个文件的所有内容复制到后一个文件中24从键盘上输入一个十进制数,以十六进制数显示出来。
要求子程序用寄存器参数传送方法25.试编制一个程序,把bx寄存器中的二进制数用十六进制数的形式在屏幕上显示出来代码:1.逆序输出字符串“BASED ADDRESSING”s1 segment stack ;定义栈段s1dw 100 dup(?) ;定义栈空间为100top label word ;top指向栈顶s1 endss2 segment ;定义数据段s2s db 'BASED ADDRESSING','$' ;定义字符串sS2 endss3 segment ;定义代码段s3assume cs:s3,ds:s2,ss:s1main proc farmov ax,s1 ;栈初始化——mov ss,axlea sp,top ;——栈初始化mov ax,s2 ;数据段初始化——mov ds,ax ;——数据段初始化mov si,15l: mov dl,s[si] ;dl获取字符串s的最后一个(从零开始的第十五个字符)mov ah,2 ;调用int 21h 2号功能输出dl上的值int 21hdec si ;寄存器减一,准备获取下一个字符cmp si,0ja lmov ah,4ch ;终止int 21hmain endps3 endsend main2.从键盘上输入两个数,分别放到x,y单元,求出它们的和s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input x:','$' ;提示输入h2 db 'Please input y:','$' ;提示输入h3 db 'z=x+y:','$' ;提示输出crlf db 0dh,0ah,24h ;定义回车换行x dw ?y dw ?s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1 ;初始化——mov ss,axlea sp,topmov ax,s2mov ds,ax ;——初始化lea dx,h1 ;int 21h 9号功能输出“提示输入x”的字符串mov ah,9int 21hxor bx,bx ;bx清零,即把bx置零InputX:mov ah,1 ;输入一个字符int 21hcmp al,0dh ;判断时候为“回车”字符jz exit1 ;如果是回车字符就跳转到exit1cmp al,30h ;和30h(即字符0的asii值)比较jl exit1 ;如果输入字符小于'0',跳转到exit1cmp al,39h ;和39h(即字符9的ascii值)比较jg exit1 ;如果输入字符大于'9',跳转到exit1sub al,30h ;al减去30h,输入字符转化成数字(从这一行开始到后面的add bx,ax为输入字符转化为数字的处理方法)cbw ;al扩充为axxchg ax,bxmov cx,10mul cxxchg ax,bxadd bx,ax ;sub al,30h开始到这一行为输入字符转化为数字的处理方法jmp InputXexit1: mov x,bx ;把输入的存于bx的放到x中lea dx,crlfmov ah,9int 21hlea dx,h2mov ah,9int 21hxor bx,bxInputY: ;和InputX类似,输入ymov ah,1int 21hcmp al,0dhjz exit2cmp al,30hjl exit2cmp al,39hjg exit2sub al,30hcbwxchg ax,bxmov cx,10mul cxxchg ax,bxadd bx,axjmp InputYexit2: mov y,bx ;把输入的存于bx的放到y中mov bx,xadd bx,y ;此时bx为两数加和lea dx,crlfmov ah,9int 21Hlea dx,h3mov ah,9int 21hxor si,si ;si清零,用作计数mov ax,bx ;把和放到ax上l4: mov cl,10 ;把和连续除以10知道和变为零,余数依次进栈div clmov dl,ahmov dh,0push dxinc simov ah,0 ;重要,不能漏写cmp al,0jnz l4l5: pop dx ;余数依次出栈add dl,30h ;余数转换为显示的余数字符mov ah,2 ;输入余数字符int 21hdec sicmp si,0jnz l5mov ah,4chint 21Hmain endps3 endsend main3.是编写一段程序,要求在长度为10的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域,并分别显示up、down数组的个数和数组内的数字s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'the num of up array and the up array are(prints in decimalism) :','$'h2 db 'the num of down array and the down array are(prints in decimalism) :','$'crlf db 0dh,0ah,24harray db 0,50h,11h,61h,22h,72h,33h,73h,41h,74h,'$' ;定义数组arrayup db 10 dup(?) ;定义up数组down db 10 dup(?) ;定义down数组s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov si,0mov di,1mov bp,1repeat: cmp array[si],42h ;把array数组中小于42h的值放到down数组里,大于42h 的值放到up数组里面jb downarraymov dl,array[si]mov up[bp],dlinc sicmp si,10jz exit1inc bpjmp repeatdownarray:mov dl,array[si]mov down[di],dlinc sicmp si,10jz exit2inc dijmp repeatexit1: sub di,1jmp exitexit2: sub bp,1exit: mov dx,bp ;把分配好的up数组和down数组在其有效数字后面添加'$',便于后面的输出结束mov up[0],dlinc bpmov up[bp],'$'mov dx,dimov down[0],dlinc dimov down[di],'$'mov cl,10mov si,0lea dx,h1mov ah,9int 21hPrintUparray:cmp up[si],'$'jz nextmov al,up[si]call printinc sijmp PrintUparraynext:lea dx,crlfmov ah,9int 21hlea dx,h2int 21hxor si,siPrintDownArray:cmp down[si],'$'jz atendmov al,down[si]call printinc sijmp PrintDownArrayprint proc near ;print为输出十进制输出某个数的子程序mov di,0rediv: mov ah,0div clmov dl,ahmov dh,0push dxinc dicmp al,0jnz redivbreak: pop dxadd dl,30hmov ah,2int 21hdec dicmp di,0jnz breakmov dl,' 'mov ah,2int 21Hretprint endpatend: mov ah,4chint 21Hmain endps3 endsend main4.键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input a string:','$'h2 db 'The changed string is:','$'crlf db 0dh,0ah,24htemp db ?s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axlea dx,h1mov ah,9int 21hmov si,0l: mov ah,1int 21hcmp al,0dhjz exitcmp al,'a'jl putincmp al,'z'jg putinsub al,20h ;把小写字符变为大写字符putin: mov temp[si],al ;把字符放到temp数组里inc sijmp lexit: lea dx,crlf ;输出tmp数组mov ah,9int 21hlea dx,h2mov ah,9int 21hinc simov temp[si],'$'lea dx,tempmov ah,9int 21hmov ah,4chint 21Hmain endps3 endsend main5.从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input a lowercase: ','$'h2 db 'The the three chars are: ','$'crlf db 0dh,0ah,24hs2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axl: lea dx,h1mov ah,9mov ah,1int 21hcmp al,'a'jl lcmp al,'z'jg lmov cl,allea dx,crlfmov ah,9int 21Hlea dx,h2mov ah,9int 21hdec clmov dl,cl ;输出前导字符mov ah,2int 21hmov dl,' 'mov ah,2int 21hinc clmov dl,cl ;输出该字符mov ah,2int 21hmov dl,' 'mov ah,2int 21hinc clmov dl,cl ;输出后导字符mov ah,2int 21hmov ah,4chint 21Hmain endps3 ends6.把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'the positive number is: ','$'h2 db 'the negative number is: ','$'crlf db 0dh,0ah,24harray dw 50h,-11h,61h,-22h,72h,-33h,73h,-41h,74h,21h,67h,-90h,73h,77h,-1h,-89h,-11h,61h,-22h,20h,'$'s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov bx,0mov si,0l: mov dx,array[si]cmp dx,0jl addlow ;有符号数比较用jladd si,2cmp si,40jz exitjmp laddlow: inc bxadd si,2cmp si,40jz exitjmp lmov ah,9int 21hmov ax,bxcall printlea dx,crlfmov ah,9int 21hlea dx,h1mov ah,9int 21hmov ax,20sub ax,bxcall printjmp atendprint proc near ;打印数字字符的子程序mov cl,10mov si,0repeat: div clmov dl,ahadd dl,30hmov dh,0push dxinc simov ah,0cmp al,0jnz repeatl2: pop dxmov ah,2int 21hdec sicmp si,0jnz l2retprint endpint 21Hmain endps3 endsend main7.打印输出首地址为data的20个字数组中的最小偶数s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'the min even number is: ','$'crlf db 0dh,0ah,24hdata dw 50,-11,61,-22,72,-33,73,-41,74,21,67,-90,73,77,-1,-89,-11,61,-22,20,'$' s2 endss3 segmentassume cs:s3,ds:s2,ss:s1main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov bx,65534 ;bx存最小数,初始令最小值置为65534mov si,0mov cl,100mov dl,2l2: mov ax,data[si]cmp ax,0jnl l4neg ax ;如果是负数,则求补l4: div clmov al,ahmov ah,0div dlcmp ah,0jnz l1cmp bx,data[si] ;比较最小值和数组中的每个数jl l1 ;如果数组中的数大于最小值跳转到l1mov bx,data[si] ;如果数组中的数小于最小值则将其赋给最小值l1: add si,2cmp si,40jz exitjmp l2exit: lea dx,h1mov ah,9int 21hcmp bx,0jnl l5neg bxmov dl,'-'mov ah,2int 21hl5: mov ax,bxcall print ;调用子程序输出最小值jmp atendprint proc nearmov cl,10mov si,0repeat: div clmov dl,ahadd dl,30hmov dh,0push dxinc simov ah,0cmp al,0jnz repeatmov ah,2int 21hdec sicmp si,0jnz l3retprint endpatend: mov ah,4chint 21Hmain endps3 endsend main8.输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match”s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input the first string: ','$'h2 db 'Please input the second string: ','$'h3 db 'MATCH','$'h4 db 'NO MATCH','$'crlf db 0dh,0ah,24hstr1 db 50,?,50 dup('$')str2 db 50,?,50 dup('$')s2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov ah,9int 21hlea dx,str1mov ah,0ahint 21hlea dx,crlfmov ah,9int 21hlea dx,h2int 21hlea dx,str2mov ah,0ahint 21hlea dx,crlfmov ah,9int 21hmov dl,str1+1 ;str1+1为str1实际的字符个数cmp dl,str2+1 ;str2+1为str2实际的字符个数jnz lmov si,2l2: mov dl,str1[si]cmp dl,str2[si]jnz linc sicmp si,50jz l3jmp l2l: lea dx,h4 ;输出不匹配信息mov ah,9int 21hl3: lea dx,h3 ;输出匹配信息mov ah,9int 21hint 21Hmain endps3 endsend main9.从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input a hexadecimal number: ','$'h2 db 'The number is printed in binary number: ','$'temp db 17 dup('$')crlf db 0dh,0ah,24hs2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axrepeat: lea dx,h1mov ah,9int 21hmov bx,0mov cx,4newchar: ;接收新字符mov ah,1int 21hcmp al,30hjb repeatcmp al,46hjg repeatjnb l1 ;如果输入字符大于9跳到l1sub al,30hjmp l2l1: cmp al,41hjb repeat ;如果输入字符小于A,则输入错误,跳到repeatsub al,37h ;输入字符为A~Z,故相应地要减37hjmp l2l2: cbw ;l2为把输入字符转化为数值xchg ax,bxmov dx,10hmul dxxchg ax,bxadd bx,ax;loop newchardec cxcmp cx,0jnz newcharlea dx,crlfmov ah,9int 21hlea dx,h2int 21hmov si,0mov cx,10h ;cx作计数器,即待会要循环16次l5: rol bx,1 ;bx循环左移以为,最高位进标志位jc l3 ;若标志位为1则跳转到l3mov temp[si],'0'jmp l4l3: mov temp[si],'1'l4: inc siloop l5lea dx,tempmov ah,9int 21hmov ah,4chint 21Hmain endps3 endsend main10从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果s1 segment stackdw 100h dup(?)top label words1 endss2 segmenth1 db 'Please input a string: ','$'h2 db 'The number of the chars that is not digit:','$'crlf db 0dh,0ah,24hs2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axlea dx,h1mov ah,9int 21hmov cx,0l2: mov ah,1int 21hcmp al,'$'jz exitcmp al,30hjb lcmp al,39hjnb ljmp l2l: inc cxjmp l2exit: lea dx,crlfmov ah,9int 21hlea dx,h2int 21hmov si,0mov bl,10mov ax,cxl4: div blmov dl,ahmov dh,0push dxinc simov ah,0cmp al,0jnz l4l5: pop dxadd dl,30hmov ah,2int 21hdec sicmp si,0jnz l5mov ah,4chint 21Hmain endps3 endsend main11.有一个首地址为mem的10个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零s1 segment stackdw 100h dup(?)top label words1 endss2 segmentmem dw 0,1,0,3,0,0,4,5,6,0,'$'crlf db 0dh,0ah,24hs2 endss3 segmentassume cs:s3,ds:s2,ss:s3main proc farmov ax,s1mov ss,axlea sp,topmov ax,s2mov ds,axmov si,0mov di,2repeat: cmp di,20jz exitmov bx,mem[si]mov dx,mem[di]cmp bx,0jnz nextxchg b x,dxmov mem[si],bxmov mem[di],dxnext:cmp mem[si],0jz ladd si,2l: add di,2jmp repeatexit: mov ah,4chint 21Hmain endps3 endsend main;以下是该算法描述;定义两个指针,当前指针si和检查指针di,先把si指针指向第一个字得到的值bx,;di指向第二个字得到的值dx。