24个汇编实例小程序文件

合集下载

汇编经典小程序

汇编经典小程序

汇编经典小程序(总5页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除实验一:判断一个数X的正,负数,还是零。

(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !)DATA SEGMENTX DB 10CR EQU 0DHLF EQU 0AHW DB 'This is a zore!',CR,LF,'$'ZHENG DB '+',CR,LF,'$'FU DB '-',CR,LF,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,XAND AL,ALJZ L1SHL AL,1JC L3JMP L2L1: MOV DX,OFFSET WMOV AH,9INT 21HJMP L4L2: MOV DX,OFFSET ZHENGMOV AH,9INT 21HJMP L4L3: MOV DX,OFFSET FUMOV AH,9INT 21HJMP L4L4: MOV AH,4CHINT 21HCODE ENDSEND START实验二:求十个数中的最小数,并以十进制输出。

(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法)DATA SEGMENTXDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09HMIN DBCR EQU 0DHLF EQU 0AHW DB ' is min',CR,LF,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,9MOV SI,OFFSET XDATMOV AL,[SI]L2: CMP AL,[SI+1]JC L1MOV AL,[SI+1]L1: INC SILOOP L2ADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV DX,OFFSET WMOV AH,9INT 21HCODE ENDSEND START实验三:设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小从新排列的程序。

(完整版)8086汇编经典例程,推荐文档

(完整版)8086汇编经典例程,推荐文档

sub bl,26 mov al,'a' add al,bl
MOV CX,00H WAIT1: LOOP WAIT1
;延时计数器 ;延时
DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8
jmp next40
DEC DX
next24: sub bl,52
==========================================
MAIN ENDP
MOV AX,[SI]
5. 编写一个数组排序(从小到大)的小程序,数组在程
序中定义,程序先将原数组显示一遍,然后排序,再
DISP PROC
将排好序的数组显示一遍。
PUSH SI
==========================================
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100
crlf proc push ax push dx
音演奏歌曲 ========================================== ;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽
ccc segment assume cs:ccc,ds:qqq
main proc far start: mov ax,qqq
mov ds,ax
next3:
jmp next10 cmp al,'a' jnae next4 cmp al,'z' ja next4 sub al,'a'

20个简单汇编语言程序 -回复

20个简单汇编语言程序 -回复

20个简单汇编语言程序-回复简明了解汇编语言,让我们先了解一下汇编语言的基本概念和特点。

汇编语言是一种低级语言,用于与计算机硬件进行沟通和交互,它是由一系列指令组成的。

与高级语言相比,汇编语言更加接近计算机的硬件和操作,因此它的指令更直观,更加底层。

下面我们来看一下20个简单的汇编语言程序:1. [将两个数相加并存储到一个寄存器中]2. [将两个数相加并存储到内存中]3. [将一个寄存器的值存储到内存中]4. [从键盘输入一个数并存储到内存中]5. [从内存中读取一个数并输出到屏幕上]6. [将两个寄存器的值进行逻辑与操作]7. [将两个寄存器的值进行逻辑或操作]8. [将两个寄存器的值进行逻辑非操作]9. [将一个寄存器的值左移一位]10. [将一个寄存器的值右移一位]11. [将一个寄存器的值加一]12. [将一个寄存器的值减一]13. [将一个寄存器的值与一个常数相加]14. [将一个寄存器的值与一个常数进行逻辑与操作]15. [将一个寄存器的值与一个常数进行逻辑或操作]16. [将一个寄存器的值与一个常数进行逻辑非操作]17. [将一个寄存器的值与一个常数左移一位]18. [将一个寄存器的值与一个常数右移一位]19. [将一个寄存器的值与一个常数进行加一]20. [将一个寄存器的值与一个常数进行减一]现在,我们将一步一步地回答这个问题,写一篇1500-2000字的文章,帮助读者更好地理解这些汇编语言程序。

第一步:介绍汇编语言在这一步,我们将介绍汇编语言的基本概念、应用领域和优缺点。

我们将解释汇编语言与高级语言之间的区别,并讨论为什么学习汇编语言对于理解计算机系统和进行底层开发非常重要。

第二步:汇编语言基础知识在这一步,我们将介绍汇编语言的基本知识和概念。

我们将解释什么是指令、寄存器、内存等,并讨论它们在汇编语言中的作用和用法。

第三步:编写简单的汇编语言程序在这一步,我们将逐个介绍这20个简单的汇编语言程序,并提供详细的说明和示例代码。

汇编语言程序经典案例100例

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

python编程100个小程序

python编程100个小程序

python编程100个小程序Python是一种简单易学的编程语言,它具有强大的功能和广泛的应用领域。

在学习Python编程的过程中,编写一些小程序是非常有帮助的。

下面我将为大家介绍100个Python编程的小程序。

1. 打印"Hello, World!":这是Python编程的入门程序,用于验证环境是否配置正确。

2. 计算两个数的和:输入两个数,计算它们的和并输出结果。

3. 判断一个数是否为偶数:输入一个数,判断它是否为偶数并输出结果。

4. 计算一个数的阶乘:输入一个数,计算它的阶乘并输出结果。

5. 判断一个数是否为质数:输入一个数,判断它是否为质数并输出结果。

6. 判断一个字符串是否为回文串:输入一个字符串,判断它是否为回文串并输出结果。

7. 判断一个字符串是否为有效的括号序列:输入一个字符串,判断它是否为有效的括号序列并输出结果。

8. 判断一个字符串是否为有效的IP地址:输入一个字符串,判断它是否为有效的IP地址并输出结果。

9. 判断一个字符串是否为有效的邮箱地址:输入一个字符串,判断它是否为有效的邮箱地址并输出结果。

断它是否为有效的手机号码并输出结果。

11. 判断一个字符串是否为有效的身份证号码:输入一个字符串,判断它是否为有效的身份证号码并输出结果。

12. 判断一个字符串是否为有效的URL地址:输入一个字符串,判断它是否为有效的URL地址并输出结果。

13. 判断一个字符串是否为有效的日期格式:输入一个字符串,判断它是否为有效的日期格式并输出结果。

14. 判断一个字符串是否为有效的密码:输入一个字符串,判断它是否为有效的密码并输出结果。

15. 判断一个字符串是否为有效的用户名:输入一个字符串,判断它是否为有效的用户名并输出结果。

16. 判断一个字符串是否为有效的文件名:输入一个字符串,判断它是否为有效的文件名并输出结果。

17. 判断一个字符串是否为有效的变量名:输入一个字符串,判断它是否为有效的变量名并输出结果。

汇编小程序_11

汇编小程序_11
MOV DPTR, #ADDR_UNLOCK2
MOV A, #55H
MOVX @DPTR, A
MOV DPTR, #ADDR_UNLOCK1
MOV A, #20H
MOVX @DPTR, A
RET
;======芯片擦除, 擦除后全为FF======
ERASE: MOV DPTR, #ADDR_UNLOCK1
MOV R4, #80H
MOV A, #55H
UWLP1: MOVX @DPTR, A
INC DPL
DJNZ R4, UWLP1
RET
;======去除保护特性======
UPROT: MOV DPTR, #ADDR_UNLOCK1
MOV A, #0AAH
MOVX @DPTR, A
MOV R4, #80H ;128
MOV A, #00H
PWLP1: MOVX @DPTR, A
INC DPL
INC A
DJNZ R4, PWLP1
RET
;======不带保护写, 写入128字节的55H======
UPWRITE:MOV DPTR, #START_ADDR
MOV A, #0AAH
MOVX @DPTR, A
MOV DPTR, #ADDR_UNLOCK2
MOV A, #55H
MOVX @DPTR, A
MOV DPTR, #ADDR_UNLOCK1
MOV A, #0A0H
MOVX @DPTR, A
MOV DPTR, #START_ADDR
DLP1: MOV R6, #0F0H
DLP2: NOP

python小程序200例

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("转换后的列表。

20个简单汇编语言程序

20个简单汇编语言程序

20个简单汇编语言程序摘要:一、汇编语言概述二、20 个简单汇编语言程序的分类1.算术运算类2.逻辑运算类3.移位操作类4.循环操作类5.条件跳转类6.子程序调用类7.输入输出类三、每类程序的简要说明和示例1.算术运算类2.逻辑运算类3.移位操作类4.循环操作类5.条件跳转类6.子程序调用类7.输入输出类四、总结正文:一、汇编语言概述汇编语言是一种低级编程语言,它与计算机硬件的操作紧密相关。

汇编语言通过指令的操作来实现对计算机硬件的控制。

与高级语言相比,汇编语言更加接近计算机硬件,执行效率更高。

但是,由于汇编语言依赖于特定的计算机架构,所以其可移植性较差。

二、20 个简单汇编语言程序的分类本文将为大家介绍20 个简单的汇编语言程序,这些程序可以分为以下几类:1.算术运算类:实现加、减、乘、除等基本算术运算。

2.逻辑运算类:实现与、或、非等基本逻辑运算。

3.移位操作类:实现左移、右移、循环移位等移位操作。

4.循环操作类:实现for 循环、while 循环等循环控制结构。

5.条件跳转类:实现if-else 语句、switch-case 语句等条件跳转控制结构。

6.子程序调用类:实现子程序的调用和返回。

7.输入输出类:实现对输入输出设备的操作,如从键盘读取数据、向屏幕输出数据等。

三、每类程序的简要说明和示例1.算术运算类算术运算类程序主要包括加法程序、减法程序、乘法程序和除法程序等。

例如,以下是一个简单的加法程序:```DATA SEGMENTA DW 10B DW 20SUM DW 0DATA ENDSCODE SEGMENT ASSUME DS:DATA, CS:CODE START:MOV AX, DATAMOV DX, SUMCALL ADDMOV AH, 02HINT 21HADD PROCMOV AX, PTR [DATA]ADD AX, PTR [DATA + 2]MOV PTR [SUM], AXRETADD ENDPCODE ENDSEND START```2.逻辑运算类逻辑运算类程序主要包括与运算程序、或运算程序和非运算程序等。

100个汇编范例

100个汇编范例

定点运算和定点数制转换;范例1LSDAA: ADC R16,R16 ;十进制数(在R16中)左移调整子程序ADDAA: IN R6,SREG ;bcd码相加调整子程序,先保存相加后的LDI R17,$66 ;状态the old statusADD R16,R17 ;再将和预加立即数$66IN R17,SREG ;输入相加后新状态(the new status)OR R6,R17 ;新旧状态相或SBRS R6,0 ;相或后进位置位则跳行SUBI R16,$60 ;否则减去$60(十位bcd不满足调整条件)SBRS R6,5 ;半进位置位则跳行SUBI R16,6 ;否则减去$06(个位bcd不满足调整条件)ROR R6 ;向高位字节BCD返还进位位!RET;范例2SUDAA: BRCC SBD1 ;bcd码减法调整子程序,差在R16中BRHC SBD3SUBI R16,$66 ;进位半进位都置位,将差减去立即数$66SEC ;并恢复借位CRET ;ret. with seCSBD1: BRHC SBD2 ;进位半进位都清位,返回SUBI R16,6 ;进位清除而半进位置位,将差减去6SBD2: RET ;ret. with clCSBD3: SUBI R16,$60 ;进位置位而半进位清除,将差减去$60SEC ;并恢复借位CRET ;ret. with seC;范例3RSDAA: SBRC R16,7 ;bcd码(在R16中)右移调整子程序SUBI R16,$30 ;十位BCD最高位为1(代表8),将其变为5(否则跳行)SBRC R16,3SUBI R16,3 ;个位BCD最高位为1(代表8),将其变为5(否则跳行)RET;范例4ADBCD4: MOV R16,R15 ;4字节压缩bcd码相加子程序ADD R16,R11 ;R12,R13,R14,R15内为被加数,R8,R9,R10,R11内为加数RCALL ADDAA ;相加后调整MOV R15,R16 ;并返还调整后结果MOV R16,R14ADC R16,R10RCALL ADDAAMOV R14,R16MOV R16,R13ADC R16,R9RCALL ADDAAMOV R13,R16MOV R16,R12ADC R16,R8RCALL ADDAAMOV R12,R16RET;范例5ADBCD: LDI R16,4 ;多字节压缩bcd码相加子程序MOV R7,R16 ;(r7):字节数CLCADLOP: LD R16,-X ;X-1指向被加数;LD R6,-Y ;Y-1指向加数ADC R16,R6RCALL ADDAA ;相加后调整ST X,R16 ;返还调整后结果DEC R7BRNE ADLOPRET;范例6SUBCD4: MOV R16,R15 ;4字节压缩bcd码减法子程序 SUB R16,R11 ;R12,R13,R14,R15内为被减数,R8,R9,R10,R11内为减数RCALL SUDAA ;相减后调整MOV R15,R16 ;并返还调整后结果MOV R16,R14SBC R16,R10RCALL SUDAAMOV R14,r16MOV R16,R13SBC R16,R9RCALL SUDAAMOV R13,R16MOV R16,R12SBC R16,R8RCALL SUDAAMOV R12,R16RET;范例7SUBCD: LDI R16,4 ;多字节压缩bcd码相减子程序MOV R7,R16 ;(r7):压缩bcd码字节数CLCSUBLP: LD R16,-X ;X-1指向被减数LD R6,-Y ;Y-1指向减数SBC R16,R6RCALL SUDAA ;相减后调整ST X,R16 ;返还调整后结果DEC R7BRNE SUBLPRET;范例8 ;16位被乘数*16位乘数-->32位积MUL16: LDI R16,17 ;(r10r11)*(r14r15)-->r12r13r14r15ClR R12ClR R13 ;积的高位字预清除CLC ;第1次只右移,不相加MLOOP: BRCC MUL1 ;ADD R13,R11 ;乘数右移移出位为1,将被乘数加入部分积ADC R12,R10MUL1: ROR R12ROR R13ROR R14ROR R15 ;部分积连同乘数整体右移1位DEC R16BRNE MLOOP ;17次右移后结束RET;范例9 ;16位整数被乘数*16位小数乘数-->16位整数积,精确到0.5MUL165: RCALL MUL16 ;先得到32位积SBRS R14,7 ;积小数部分最高位为1,将整数部分加1RET ;否则返回LDI R17,255SUB R13,R17SBC R12,R17 ;以减去-1($FFFF)替代加1RET;范例10 ;32位被除数/16位除数-->16位商,精确到1 DIV16: LDI R16,16 ;(r12r13r14r15)/(r10r11)-->r14r15 DLOOP: LSL R15ROL R14ROL R13ROL R12 ;被除数左移1位BRCS DI1SUB R13,R11SBC R12,R10 ;移出位为0,被除数高位字减去除数试商BRCC DI2 ;够减,本位商为1ADD R13,R11ADC R12,R10 ;否则恢复被除数RJMP DI3 ;本位商0DI1: SUB R13,R11SBC R12,R10 ;移出位为1,被除数高位字减去除数DI2: INC R15 ;本位商1DI3: DEC R16BRNE DLOOPRET;范例11 ;32位被除数/16位除数-->16位商,精确到0.5;可能产生溢出!例$7FFFC000/$8000=$FFFF.8->$10000!DIV165: RCALL DIV16 ;(r12r13r14r15)/(r10r11)-->r14r15LSL R13ROL R12 ;余数乘2BRCS D165 ;有进位,转5入SUB R13,R11SBC R12,R10 ;否则,余数乘2减去除数BRCS D164 ;不够减,转4舍D165: CLR R13 ;否则将商增1SECADC R15,R13ADC R14,R13ADC R13,R13 ;若有溢出,溢出位在R13中RETD164: CLR R13RET;范例12 ;32位整数/16位整数->16整数+16位小数->4字节浮点数;(r12r13r14r15)/(r10r11)-->r12r13r14r15 DIV16F: RCALL DIV16 ;先做整数除法MOV R9,r15MOV R8,r14 ;保存整数部分CLR R15CLR R14RCALL DIV16 ;除得小数部分MOV R11,R15MOV R15,R14MOV R13,R8MOV R14,R9 ;整数部分在r13r14,小数部分在r15r11LDI R17,$90 ;预设阶码$90(整数为16位)MOV R12,R17LDI R17,32 ;设32次右移DIV16L: SBRC R13,7RJMP NMLDN ;最高位为1,已完成规格化LSL R11 ;否则继续右移R13,R14,R15,R11ROL R15ROL R14ROL R13DEC R12 ;阶码减1DEC R17BRNE DIV16LCLR R12 ;右移达32次,浮点数为零,置零阶RETNMLDN: SBRS R11,7RJMP DIVRT ;欲舍去部分(R11)最高位为0,转4舍RCALL INC3 ;否则尾数部分增1BRNE DIVRTINC R12 ;尾数增1后变为0,改为0.5,并将阶码增1 DIVRT: LDI R17,$7F ;将尾数最高位清除,表示正数(负数不要清除) AND R13,R17 ;规格化浮点数在R12(阶码)R13R14R15(尾数)中RET;范例13 ;(R16,R12,R13,R14,R15)/(R10,R11)-->R13,R14,R15DIV24: CLR R16 ;32位整数/16位整数->24位整数,要求(R10)不为0;否则;要求(R12)<(R11) DIV40: LDI 17,24 ;40位整数/16位整数->24位整数要求(R16,R12)LXP: LSL R15 ; <(R10,R11)ROL R14ROL R13ROL R12ROL R16BRCC LXP1SUB R12,R11 ;右移后C=1 够减SBC R16,R10 ;被除数减去除数RJMP DIV0 ;本位商为1LXP1: SUB R12,R11 ;C=0SBC R16,R10 ;被除数减去除数试商BRCC DIV0 ;C=0 够减,本位商1ADD R12,R11ADC R16,R10 ;否则恢复被除数,本位商0RJMP DIV1DIV0: INC R15 ;记本位商1DIV1: DEC R17BRNE LXPLSL R12ROL R16BRCS GINC ;C=1,5入SUB R12,R11SBC R16,R10BRCS RET3 ;不够减,舍掉GINC: RCALL INC3 ;将商增1RET3: RET;范例14 ;定点整数(最大$FFFFFFFF)开平方子程序INTSQR: LDI R16,17 ;SQR(R12,R13,R14,R15)-->(r15r8r9)CLR R8 ;R8,R9存储平方根CLR R9 ;r10,r11,r12,r13,r14,r15CLR R10 ; r8, r9(根) r16 (counter) CLR R11 ;r10,r11:被开平方数扩展字节LDI R17,$40SQR0: SUB R12,R17SBC R11,R9SBC R10,R8BRCS SQR1SEC ;试根够减,本位根1RJMP SQR2SQR1: ADD R12,R17ADC R11,R9ADC R10,R8CLC ;否则恢复被开平方数,本位根0SQR2: DEC R16BRNE SQR3 ;when the No.17bit of root be getting SQR20: ADC R9,R15 ;R15 HAVE BEEN CLEARED!ADC R8,R15ADC R15,R15 ;将开出之根4舍5入,使根最大可达65536(=$10000)!RET ;for example:sqr.($ffff0001)≈$10000 SQR3: ROL R9ROL R8 ;记本位根LSL R15ROL R14ROL R13ROL R12ROL R11ROL R10 ;被开平方数连同其扩展字节左移一位LSL R15ROL R14ROL R13ROL R12ROL R11ROL R10 ;被开平方数连同其扩展字节再次左移一位/左移2位开出1位根BRCS SQR20 ;被开平方数左移2位后,若进位置位,则仅表明第17位根;已被提前开出且该位根=1,将平方根增1,开平方结束。

几个简单的汇编程序

几个简单的汇编程序
高级语言与汇编语言的融合:随着计算机技术的不断发展,高级语言和汇编语言的界限将逐渐模糊。未来,我们 可能会看到更加智能化的编译器和调试工具,使得高级语言和汇编语言能够更加方便地相互转换和融合。
汇编语言在特定领域的应用:尽管高级语言在通用编程领域具有优势,但在某些特定领域,如嵌入式系统、操作 系统内核开发、性能优化等,汇编语言仍然具有不可替代的作用。未来,随着物联网、边缘计算等领域的快速发 展,汇编语言的应用前景将更加广阔。
汇编语言与高级语言比较
编程效率
高级语言编程效率高,代码易于 理解和维护;而汇编语言编程效
率低,代码难以理解和维护。
执行效率
汇编语言执行效率高,可以直接控 制硬件;而高级语言执行效率相对 较低,需要通过编译器或解释器转 换为机器语言。
可移植性
高级语言可移植性好,可以在不同 平台上运行;而汇编语言可移植性 差,只能在特定平台上运行。
; 如果相同,
inc rcx
; 如果不同,继
续遍历下一个字符
汇编代码实现
• jmp .loop ; 跳转到循环开始处
汇编代码实现
.found
mov rax, rcx
; 将找到的位置(计数器值)存储到rax寄存器中
jmp .end
; 跳转到函数结束处
汇编代码实现
.notFound
mov rax, -1 ; 将未找到的特殊值(-1) 存储到rax寄存器中
汇编代码实现
; 存储查找结果到result变量
mov [result], rax
; 退出程序
汇编代码实现
mov eax, 60
xor edi, edi
汇编代码实现
syscall
; 查找函数,接受两个参数:字符 串和要查找的字符的地址

常见汇编小程序大全

常见汇编小程序大全

;1加到任意的数STACK SEGMENT STACKDB 100H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART:MOV CL,10MOV AH,01HMOV AL,0PUSH AXPRINT:MOV AH,01HINT 21HCMP AL,0DHJE SSUB AL,30HMOV DL,ALPOP AXMUL CLADD AL,DLPUSH AXJMP PRINTS:MOV DL,0AHMOV AH,02HINT 21HPOP AX ;输出回车换行MOV CL,AL ;加法器,并输出结果AND CX,00FFHMOV AX,0MOV BX,1SSS: ADD AX,BXINC BXLOOP SSSMOV CX,0XXX: MOV DX,0MOV BX,10DIV BXINC CXPUSH DXCMP AX,0JA XXXMOV AH,02HSSSS:POP DXADD DL,30HINT 21HLOOP SSSSMOV AH,4CHINT 21HCODE ENDSEND START;2 p进制bx(入口)转换STACK SEGMENT STACKDB 100H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART:MOV CL,10MOV AH,01HMOV AL,0PUSH AXPRINT:MOV AH,01HINT 21HCMP AL,0DHJE SSUB AL,30HMOV DL,ALPOP AXMUL CLADD AL,DLPUSH AXJMP PRINTS:MOV DL,0AHMOV AH,02HINT 21HMOV CX,0POP AXXXX: MOV DX,0MOV BX,7 ;进制的入口参数DIV BXINC CXPUSH DXCMP AX,0JA XXXMOV AH,02HSSSS:POP DXADD DL,30HINT 21HLOOP SSSSMOV AH,4CHINT 21HCODE ENDSEND STARTXXX: ADD AL,37HJMP XXXXQQQ: ADD AL,30HXXXX: MOV DL,ALMOV AH,02HINT 21H;3 x的n次方DATA SEGMENTX DB 80H DUP(0)Y DB 80H DUP(0)DATA ENDSSTACK SEGMENTDW 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA ;该程序实现了首位是0则吧输出的功能MOV DS,AX ;局限是两个数必须是个位数MOV AH,01H ;并且输入时两个数之间没有空格检测INT 21HMOV X,AHSUB AL,30HMOV Y,ALMOV AH,01HINT 21HSUB AL,30HMOV BL,ALMOV AL,YMOV CL,YXXX: MUL CLINC XCMP BL,XJNE XXXPUSH AXMOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21HPOP AXMOV CX,0XX: MOV DX,0MOV BX,10DIV BXINC CXPUSH DXCMP AX,0JA XXMOV AH,02H SSSS:POP DXADD DL,30HINT 21HLOOP SSSSMOV AH,4CHINT 21HCODE ENDSEND START;4 y与x的选择输出STACK SEGMENT STACK DW 20H DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK START:MOV AH,01HINT 21HSUB AL,30HMOV AH,0MOV BL,ALCMP AL,3JE S1CMP AL,4JE S2CMP AL,5JE S3CMP AL,6JE S4CMP AL,3JNA S5CMP AL,7JNB S5S1:MUL BL ADD AL,BL JMP SSSS2:MUL BLSUB AL,BLSUB AL,BLJMP SSSS3:MUL BLJMP SSSS4:MUL BXMOV CL,2DIV CLJMP SSSS5:MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHINT 21HMOV DL,65HINT 21HMOV DL,72HINT 21HMOV DL,72HINT 21HMOV DL,6FHINT 21HMOV DL,72HINT 21HJMP XX SSS:MOV CL,16DIV CLPUSH AXPUSH AXMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HPOP AXMOV DL,ALADD DL,30HMOV AH,02HINT 21HPOP AX ;也可以movdl,ah效果一样MOV CL,8SHR AX,CLCMP AL,9JA XXXCMP AL,9JNA QQQXXX: ADD AL,37HJMP XXXXQQQ: ADD AL,30HXXXX: MOV DL,ALMOV AH,02HINT 21HXX: MOV AH,4CHINT 21HCODE ENDSEND START;5 跟踪数据段DATA SEGMENTX DB 80H DUP(0)DATA ENDSSTACK SEGMENTDW 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV SI,OFFSET XWW: MOV AH,01HINT 21HCMP AL,3DHJE ZZCMP AL,3AHJB YYSUB AL,37HMOV [SI],ALINC SIJMP WWYY: SUB AL,30HMOV [SI],ALINC SIJMP WWZZ: DEC SI ;这是要注意的MOV AH,[SI]DEC SIMOV AH,[SI]MOV AH,4CHINT 21HCODE ENDSEND START;6九九乘法表STACK SEGMENTDW 30H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV CX,101HJMP WWQQ: INC CLMOV DL,20H ;输出空格MOV AH,02HINT 21HWW: MOV DL,CHADD DL,30HMOV AH,02HINT 21HMOV DL,2AHINT 21HMOV DL,CLADD DL,30HINT 21HMOV DL,3DHINT 21HMOV AL,CHMOV BL,CLMOV AH,0MOV BL,0AHDIV BLPUSH AXMOV DL,ALADD DL,30HCMP DL,30HJE KKKMOV AH,02HINT 21HJMP RRKKK: MOV DL,20H ;乘之后结果首位是0 MOV AH,02HINT 21HRR: POP AXMOV DL,AHADD DL,30HMOV AH,02HINT 21HCMP CH,CLJA QQMOV AH,02H ;回车换行MOV DL,0DHINT 21HMOV DL,0AHINT 21HCMP CH,9JE EEINC CHMOV CL,1JMP WWEE: CODE ENDSEND START;7 逆向输出DATA SEGMENTX DB 80H DUP(0)DATA ENDSSTACK SEGMENTDW 80H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV BX,OFFSET X XXX: MOV AH,01HINT 21HCMP AL,0DHJE QQQMOV [BX],ALINC BXJMP XXXQQQ: MOV AH,02HMOV DL,0AHINT 21HQQ: DEC BXMOV DL,[BX]MOV AH,02HINT 21HMOV CX,BXINC CXCMP CX,OFFSET XJNE QQMOV AX,4C00HINT 21HCODE ENDSEND START;8 去掉空格并反向输出DATA SEGMENTX DB 80H DUP(0)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET X XXX: MOV AH,01HINT 21HCMP AL,0DHJE QQQMOV [BX],ALINC BXJMP XXXQQQ: MOV AH,02HMOV DL,0AHINT 21HQQ: DEC BXJE QQMOV DL,[BX]MOV AH,02HINT 21HMOV CX,BXCMP CX,OFFSET XJNE QQMOV AX,4C00HINT 21HCODE ENDSEND START;9四位二进制数转换为压缩的bcd码DATA SEGMENTX DB 80H DUP(0)DATA ENDSSTACK SEGMENTDW 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV CX,4MOV BX,OFFSET XXX: MOV AH,01HINT 21HCMP AL,3AHJB XXXSUB AL,37HJMP QQXXX: SUB AL,30HQQ: MOV [BX],ALINC BXLOOP XXMOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21HMOV CX,4MOV BX,OFFSET XQQQ: MOV AL,[BX]MOV DH,8XOR AH,AHDIV DHPUSH AXADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP AXMOV AL,AHMOV DH,4XOR AH,AHDIV DHPUSH AXADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP AXMOV AL,AHMOV DH,2XOR AH,AHDIV DHPUSH AXADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP AXADD AH,30HMOV DL,AHMOV AH,02HINT 21HINC BXLOOP QQQMOV AH,4CHINT 21HCODE ENDSEND START ;10 星星输出DATA SEGMENTX DB 80H DUP(0) DATA ENDS STACK SEGMENT DW 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATAMOV DS,AXMOV AH,01HINT 21HINC ALSUB AL,30HMOV BL,ALMOV BH,ALMOV AH,0MOV CX,AXMOV DH,1PUSH AXMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHINT 21HDEC CLMOV X,CLXX: MOV DL,20H ;定义两个段xx和qq是两种运算,不过在第一层循环里MOV AH,02HINT 21HLOOP XXQQ: MOV DL,2AHINT 21HMOV CL,XJMP BBAA: MOV DL,2AHINT 21HBB: INC CLCMP BL,CLJE SSSSINC CLMOV DL,20HMOV AH,02HINT 21HJMP AASSSS: INC BLMOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21HINC DHDEC XMOV CL,XCMP BH,DHJE QQQCMP BH,DHJNE XXQQQ: MOV AX,4C00HINT 21HCODE ENDSEND START;11 字符串的比较DATA SEGMENTX DB 50H DUP(0)Y DB 50H DUP(0)Z DB 'CHAR1>CHAR2'A DB 'CHAR1<CHAR2'B DB 'CHAR1=CHAR2' DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV CX,0MOV BX,OFFSET X XXX: MOV AH,01HINT 21HCMP AL,0DHJE QQQMOV [BX],ALINC BXINC CHJMP XXXQQQ: MOV AH,02HMOV DL,0AHINT 21HMOV SI,OFFSET Y QQ: MOV AH,01HINT 21HCMP AL,0DHJE WWWMOV [SI],ALINC SIINC CLJMP QQWWW: MOV AH,02HMOV DL,0AHINT 21HCMP CH,CLJA AACMP CH,CLJB BBMOV BX,OFFSET XMOV SI,OFFSET YMOV DL,CHSSS: CMP DL,0 ;两个数的长度要是一样,则每一项进行比较,从高位首项开始JE CCDEC DLMOV CH,[BX]MOV CL,[SI]CMP CH,CLJA AACMP CH,CLJB BBINC BXINC SIJMP SSSAA: LEA DI,ZA1: CMP DH,11JE ZZMOV DL,[DI]MOV AH,2INT 21HINC DHINC DIJMP A1BB: LEA DI,AB1: CMP DH,11JE ZZMOV DL,[DI]MOV AH,2INT 21HINC DHINC DIJMP B1CC: LEA DI,BC1: CMP DH,11JE ZZMOV DL,[DI]MOV AH,2INT 21HINC DHINC DIJMP C1ZZ: MOV AH,4CHINT 21HCODE ENDSEND START;12两个循环实现向量相乘DATA SEGMENTVA DB 1,3,5,7,9VB DB 2,4,6,8,10COUNT EQU $-VBRESULT DB COUNT*COUNT DUP(0)DATA ENDSSTACK SEGMENT PARA STACKDW 40H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXLEA SI,VALEA DI,VBLEA BP,RESULTPUSH BPMOV CX,COUNTLOP1: PUSH CXPUSH DIMOV CX,COUNTMOV AL,[SI]MOV AH,0LOP2: PUSH AXMUL BYTE PTR [DI]MOV [BP],AXPOP AXADD BP,1INC DILOOP LOP2POP DIPOP CXINC SIMOV CX,25POP BPLOP3: MOV AX,[BP]MOV BL,0AHMOV AH,0DIV BLPUSH AXMOV DL,ALADD DL,30HCMP DL,30HJE KKKMOV AH,02HINT 21HJMP RRKKK: MOV DL,20H ;乘之后结果首位是0MOV AH,02HINT 21HRR: POP AXMOV DL,AHADD DL,30HMOV AH,02HINT 21HMOV DL,20HINT 21HADD BP,1LOOP LOP3MOV AH,4CHINT 21HCODE ENDSEND START;13求阶乘DATA SEGMENTRES DW ?DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0) ;8的阶乘就不行了,寄存器的位数有限STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATAMOV DS,AXCALL STDINMOV AH,0MOV AH,02H ; 回车换行MOV DL,0DHINT 21HMOV DL,0AHINT 21HPOP AXMOV BX,1CALL FACTMOV RES,BXMOV AX,BX ;想让它输出MOV CX,0XXX: MOV DX,0MOV BX,10DIV BXINC CXPUSH DXCMP AX,0JA XXXMOV AH,02HSSS:POP DXADD DL,30HINT 21HLOOP SSSMOV AH,4CHINT 21HSTDIN PROCMOV AH,1INT 21HCMP AL,30HJL STDINCMP AL,37HJG STDINAND AL,0FHRETSTDIN ENDPFACT PROCCMP AX,0JG NEXT1MOV BX,1RETNEXT1:CMP AX,1JG NEXT2RETNEXT2:PUSH AXMUL BXMOV BX,AXPOP AXDEC AXCMP AL,1JA NEXT2RETFACT ENDPCODE ENDSEND START;14 十进制多字节加法器DATA SEGMENTX DB 20H DUP(0)Y DB 20H DUP(0)Z DB 20H DUP(0)DATA ENDSSTACK SEGMENTDW 20H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV CX,0MOV BP,OFFSET XMOV SI,OFFSET YMOV DI,OFFSET ZXX: MOV AH,01HINT 21HCMP AL,2BH ;是加号就跳JE WWSUB AL,30HMOV [BP],ALINC BPINC CHJMP XXWW: MOV AH,01HINT 21HCMP AL,3DH ;是等于号就跳JE AASUB AL,30HMOV [SI],ALINC SIINC CLJMP WWAA: CMP CL,CHJB DDMOV DL,CLMOV DH,CLJMP MM ;取较长的数的长度用来比较DD: MOV DL,CHMOV DH,CHMM: CMP DL,0JE KKDEC SIDEC BPMOV AL,[BP]MOV AH,[SI]ADD AL,AHMOV [DI],ALDEC DLINC DIJMP MMKK: PUSH DXMOV DI,OFFSET Z ;DI重新指向最低位,既段首RR: CMP DH,0 ;核心,与16的比较,小于16的不管,全部比较一遍。

(完整word版)单片机汇编语言经典一百例

(完整word版)单片机汇编语言经典一百例

51单片机实用程序库4.1 流水灯程序介绍:利用P1 口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。

实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。

程序实例(LAMP.ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;灭所有的灯MOV A,#11111110BMAIN1:MOV P1,A ;开最左边的灯ACALL DELAY ;延时RL A ;将开的灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND4.2 方波输出程序介绍:P1.0 口输出高电平,延时后再输出低电平,循环输出产生方波。

实际应用中例如:波形发生器。

程序实例(FAN.ASM):ORG 0000HMAIN:;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;////////////////////////////////////////////////// DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定时器功能实例5.1 定时1秒报警程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。

实际应用例如:定时报警器。

程序实例(DIN1.ASM):ORG 0000HAJMP MAINORG 000BHAJMP DIN0 ;定时器0入口MAIN:TFLA G EQU 34H ;时间秒标志,判是否到50个0.2秒,即50*0.2=1秒MOV TMOD,#00000001B;定时器0工作于方式1MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒11SETB EA ;开总中断SETB ET0 ;开定时器0中断允许SETB TR0 ;开定时0运行SETB P1.0LOOP: AJMP LOOPDIN0:;是否到一秒////////////////////////////////////////INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,#00HCPL P1.0;//////////////////////////////////////////////////RE:MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒RETIEND5.2 频率输出公式介绍:f=1/ts51 使用12M晶振,一个周期是1微秒使用定时器1工作于方式0,最大值为65535,以产生200HZ的频率为例:200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电12平或低电平的时间为2500 微秒。

汇编语言小程序例子

汇编语言小程序例子

1.编写统计AX中1、0个数的源程序.1的个数存入CH,0的个数存入CL。

CODE SEGMENTASSUME CS:CODESTART: MOV CX, 0MOV DX,17AA1: SUB DX, 1JZ AA3SHL AX, 1JNC AA2INC CHJMP AA1AA2: INC CLJMP AA1AA3: MOV AH,4CHINT 21HCODE ENDSEND START2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示“MATCH”,若不相同则显示“NO MATCH”.程序:DATA SEGMENTR1 DB 'MATCH’,0AH,0DHR2 DB 'NO MATCH’,0AH,0DHSTRING1 DB ’XXXXX'N1 EQU $-STRING1STRING2 DB 'YYYYY'N2 EQU $-STRING2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,N1CMP AX,N2JNZ AA1ADD AX,1LEA SI,STRING1LEA DI,STRING2AA2: MOV BL,[SI]MOV BH,[DI]INC SIINC DISUB AX,1JZ AA3CMP BL,BHJZ AA2JMP AA1AA3: LEA BX,R1MOV CX,7AA4: MOV DL,[BX]INC BXMOV AH,2INT 21HLOOP AA4JMP EAA1: LEA BX,R2MOV CX,10AA5: MOV DL,[BX]INC BXMOV AH,2INT 21HLOOP AA5E: MOV AH,4CHINT 21HCODE ENDSEND START3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数。

文件汇编格式要求

文件汇编格式要求

文件汇编格式要求全文共四篇示例,供读者参考第一篇示例:文件汇编格式要求文件是我们在工作和生活中经常会遇到的物件,它们承载着重要的信息和数据。

在这些文件当中,有一类特殊的文件——汇编文件。

汇编文件是一种将多个文件或信息整合在一起的文件格式,通常用于整理和归档相关内容。

为了确保汇编文件的有效性和可读性,制作时有一些格式要求需要遵循。

汇编文件的命名应该清晰简洁。

文件名应该能够准确反映文件内容,便于快速识别和查找。

避免使用过长或含糊不清的文件名,以免混淆和造成不便。

汇编文件内部的内容组织结构应该合理有序。

文件内的信息应该按照一定的逻辑顺序排列,方便读者理解和查阅。

可以根据不同的主题或分类对内容进行分块,并标明清晰的标题和小标题,提供便捷的导航。

汇编文件中的文字应该规范准确。

使用正确的语法和标点符号,避免拼写错误和语法错误。

特别是在涉及专业术语或技术名词时,应该使用准确的术语,并在需要时提供解释或注释。

汇编文件中的图片、表格和图表等内容应该清晰可辨。

图片应该清晰度高,表格和图表应该规范美观,并标明单位和数据来源。

这样可以让读者更直观地理解文件内容,提高信息传达的效率。

汇编文件格式的选择也很重要。

不同的文件格式适用于不同的内容和用途。

常见的汇编文件格式包括.doc、.pdf、.ppt等,选择适合的格式可以更好地呈现和传播信息。

汇编文件是一种重要的文件格式,在制作时需要遵循一些格式要求。

清晰简洁的文件名、合理有序的内容组织、规范准确的文字表达、清晰可辨的图片和表格、适合的文件格式选择,这些都是制作汇编文件时需要注意的方面。

只有在遵循正确的规范和格式要求的基础上,才能制作出高质量的汇编文件,提高工作效率和信息传达的准确性。

愿我们在工作和生活中,能够根据以上要求,制作出更加优质和便捷的汇编文件。

第二篇示例:文件汇编格式是一种用于保存数据和代码的标准格式。

在计算机科学领域,文件汇编格式要求对文件的组织结构和内容进行规范化,以便于程序运行和数据访问。

汇编语言_24个汇编实例小程序

汇编语言_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,则把其它两个单元也清零。

请编写此程序从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示这三类的计数结果已定义两个整数变量A和B,试编写程序完成以下功能(1)若两个树种有一个是奇数,则将奇数存入A中,偶数存入B中(2)若两个数均为奇数,则将两个数加1后存回原变量(3)若两个数均为偶数,则两个变量均不变写一段子程序skiplines,完成输出空行的功能。

VB小程序代码实例

VB小程序代码实例

VB小程序代码实例VB小程序是一种基于Visual Basic语言开辟的应用程序,它可以在Windows 操作系统上运行。

本文将为您提供一个VB小程序代码实例,匡助您了解如何编写和运行一个简单的VB小程序。

代码实例如下:```vbImports SystemPublic Class HelloWorldPublic Shared Sub Main()Console.WriteLine("Hello, World!")Console.ReadLine()End SubEnd Class```上述代码是一个经典的“Hello, World!”程序,它会在控制台输出一条问候语,并等待用户按下回车键。

下面是代码解释:- `Imports System`:这个语句告诉编译器我们将使用System命名空间中的类和方法。

- `Public Class HelloWorld`:这是一个公共类的声明,类名为HelloWorld。

- `Public Shared Sub Main()`:这是程序的入口点,它是一个公共静态方法,程序从这里开始执行。

- `Console.WriteLine("Hello, World!")`:这行代码会在控制台输出一条问候语。

- `Console.ReadLine()`:这行代码会等待用户按下回车键,以便程序暂停执行。

您可以将上述代码复制到一个文本编辑器中,并将文件保存为`.vb`扩展名。

然后,使用VB编译器将其编译为可执行文件,并在Windows操作系统上运行。

这个简单的VB小程序只是一个入门示例,您可以根据自己的需求和兴趣编写更复杂的VB小程序。

VB语言具有丰富的特性和功能,可以用于开辟各种类型的应用程序,包括图形用户界面(GUI)应用程序、数据库应用程序、Web应用程序等。

希翼这个VB小程序代码实例能够匡助您入门VB编程,并为您今后的学习和开辟提供一些参考。

汇编语言_24个汇编实例小程序

汇编语言_24个汇编实例小程序

汇编语言_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,则把其它两个单元也清零。

微信小程序开发---各代码文件简介

微信小程序开发---各代码文件简介

微信⼩程序开发---各代码⽂件简介根据上⼀⽂,已建⽴QuickStart 项⽬,该项⽬系本⼈毕设部分内容,所以记录以便以后查阅开发⼩程序就必须了解⼩程序项⽬⽬录结构和⽂件作⽤,接下来就根据我现在⾃学得到的知识把这些记录下来。

⼀、⽬录介绍⾸先这是该项⽬⽬录⼩程序包含⼀个描述整体程序的app和对个描述各⾃页⾯的page,⼩程序的主体部分由三个⽂件组成----app.js、app.json、app.wxss,他们的作⽤如下⼀个⼩程序页⾯由四个⽂件组成---js、wxml、wxss、json⼆、配置介绍全局配置⼩程序根⽬录下的 app.json ⽂件⽤来对微信⼩程序进⾏全局配置,决定页⾯⽂件的路径、窗⼝表现、设置⽹络超时时间、设置多 tab 等。

这是Quickstrat⾃动⽣成的app.json{"pages": ["pages/index/index","pages/logs/index"],"window": {"navigationBarTitleText": "Demo"},"tabBar": {"list": [{"pagePath": "pages/index/index","text": "⾸页"}, {"pagePath": "pages/logs/logs","text": "⽇志"}]},"networkTimeout": {"request": 10000,"downloadFile": 10000},"debug": true,"navigateToMiniProgramAppIdList": ["wxe5f52902cf4de896"]}Pages⽤于指定⼩程序由哪些页⾯组成,每⼀项都对应⼀个页⾯的路径+⽂件名信息。

C#40个小程序

C#40个小程序

1.编一个程序,定义常量Pi=3.,从键盘上输入半径r,求出圆的面积。

const double Pi = 3.;double r,s;("请输入圆的半径");r = ());s = Pi * r * r;("圆的面积是{0}",s);2.编一个程序,定义三个double类型的变量,分别从键盘上输入值给它们,然后用方法把它们输出成一列,小数点对齐,保留3位小数。

double x, y, z;("请输入一个数:");x = ());("请输入一个数:");y = ());("请输入一个数:");z = ());("{0,10:f3}", x);("{0,10:f3}", y);("{0,10:f3}", z);一个程序,从键盘上输入三个数,用三元运算符(? :)把最大数找出来。

float x, y, z, temp;("请输入一个实数:");x = ());("请输入一个实数:");y = ());("请输入一个实数:");z = ());temp = x >= y ? x : y;temp = temp >= z ? temp : z;("最大数为:{0}", temp);4.编一个程序,从键盘上输入三个数,用三元运算符(? :)把最小数找出来。

float x, y, z, temp;("请输入一个实数:");x = ());("请输入一个实数:");y = ());("请输入一个实数:");z = ());temp = x <= y ? x : y;temp = temp <= z ? temp : z;("最大数为:{0}", temp);5.编一个程序,输入一个字符,如果是大写字母,就转换成小写字母,否则不转换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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,则把其它两个单元也清零。

请编写此程序从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示这三类的计数结果已定义两个整数变量A和B,试编写程序完成以下功能(1)若两个树种有一个是奇数,则将奇数存入A中,偶数存入B中(2)若两个数均为奇数,则将两个数加1后存回原变量(3)若两个数均为偶数,则两个变量均不变写一段子程序skiplines,完成输出空行的功能。

空行的行数由用户在主程序过键盘输入,并将行数放在ax寄存器中设有10个学生成绩分别是76, 69,84,73,88,99,63,100和80。

试编写一个子程序统计60-69分,70-79分,80-89分,90-99分和100分的人数,并分别放到S6,S7,S8,S9,S10单元中编写子程序嵌套结构的程序,把整数分别用二进制和八进制显示出来在D盘根目录建立一个文件abc.txt,第一次向文件写入“123456”六个字符,第二次增加“abcdefg”几个字符从键盘上输入文本文件:“d:\temp.txt”的容后,然后新建一个文件“d:\temp2.txt”,把前一个文件的所有容复制到后一个文件中从键盘上输入一个十进制数,以十六进制数显示出来。

要求子程序用寄存器参数传送方法试编制一个程序,把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,4chmain 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,10inc 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,9int 21hmov 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 endsend main6.把一个包含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 repeatl3: pop dxmov 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,axlea dx,h1mov 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 21hmov ah,4chint 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 repeatcmp al,39hjnb l1 ;如果输入字符大于9跳到l1sub al,30hjmp l2l1: cmp al,41hjb repeat ;如果输入字符小于A,则输入错误,跳到repeat sub 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 bx,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。

相关文档
最新文档