汇编语言编写字符串的最大最小值
汇编语言实验7实验报告

汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。
二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。
三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。
为了方便起见,我们可以先规定字符串的最大长度为100。
接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。
然后,我们需要使用INT 21H中断来读取用户输入的字符串。
具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。
接着,我们需要将该字符串逆序输出到屏幕上。
为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。
具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编数组求最值

.data
Str db’this IS a AssembLy.’0
2.答:流程图如下所示
……………………(3分)
源代码如下:
#include<std.io>
.486
.stack
.data
Str db ’this IS a AssembLy.’0
Msg db’After alter,the string is:’,$,13,10
.code
.startup…………………………(2分)
Mov cx,lengthof str
Mov bx, offset str…………………………(1分)
Again:mov al,[bx]
Cmp a1,’Z’
Jb bts ;大写,转大写转小写…………………………(1分)
sub al,32;小写,小写转大写
1.编程写一个完整的程序,求数组array中的最大值与最小值,将它们分别存入max和min单元中并将结果输出到屏幕格式为:
The max num is:
The min num is:
数据段的定义如下:
.data
arraydw 12,4,-168,122,-33,56,78,99,345,-66,-5
Bts:add al,32…………………………(1分)
Mov [bx],al ;转换后存回原地址
Loop again…………………………(1分)
Mov dx,offset msg
Mov ah,09h
Int 21h
Mov dx,offset str
Mov ah,09h
Int 21h
.exit
End…………………………(1分)
汇编语言数据类型汇总

汇编语言数据类型汇总汇编语言是一种底层的计算机语言,它直接操作计算机的硬件。
在编写汇编程序时,我们需要了解不同的数据类型,以便正确地使用和处理数据。
本文将对汇编语言中常见的数据类型进行汇总和介绍。
一、整数类型在汇编语言中,整数是最常见的数据类型之一。
汇编语言支持不同长度的整数类型,如字节、字和双字。
1. 字节(byte):字节是8位长度的整数类型,在汇编中通常用BYTE来声明字节变量。
字节范围为-128到127(有符号)或0到255(无符号)。
示例:```myByte BYTE -10 ; 有符号字节myByte2 BYTE 255 ; 无符号字节```2. 字(word):字是16位长度的整数类型,在汇编中通常用WORD来声明字变量。
字范围为-32,768到32,767(有符号)或0到65,535(无符号)。
示例:```myWord WORD -200 ; 有符号字myWord2 WORD 65535 ; 无符号字```3. 双字(double word):双字是32位长度的整数类型,在汇编中通常用DWORD来声明双字变量。
双字范围为-2,147,483,648到2,147,483,647(有符号)或0到4,294,967,295(无符号)。
示例:```myDword DWORD -10000 ; 有符号双字myDword2 DWORD 4294967295 ; 无符号双字```二、浮点数类型除了整数类型,汇编语言也支持浮点数类型,用于处理实数数据。
1. 单精度浮点数(float):单精度浮点数是32位长度的浮点数类型,在汇编中通常用REAL4或FLOAT来声明单精度浮点数变量。
示例:```myFloat REAL4 3.14 ; 单精度浮点数myFloat2 FLOAT 2.71828 ; 单精度浮点数```2. 双精度浮点数(double):双精度浮点数是64位长度的浮点数类型,在汇编中通常用REAL8或DOUBLE来声明双精度浮点数变量。
用汇编语言对字母大小写转换

物理与电气工程学院课程实践报告用汇编语言对字母大小写转换姓名** ***********专业电气工程及其自动化班级电气工程及其自动化1班年级2000级指导教师00 00成绩日期0000.6.20一.概述在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD 码、ASCll码和七段显示码等。
这些数制和编码根据其作用的不同,在存储形式上也有差异。
在实际应用中,它们也因使用的要求不同而有所差异。
在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。
还有些代码转换需要根据使用要求通过编程完成。
因此,代码转换是非数据处理中最常见的情况。
二.设计要求完成一个字母或数制之间的转化程序,主程序分别具有可选择的子功能,按相应的字符,可分别进入相应的子功能并在屏幕上显示结果。
可选择的子功能分别为:(1)实现小写字母向大写字母的转换(2)实现大写字母向小写字母的转换三.设计思想与工作原理小写字母的ASC码比大写字母的ASC码大20H,因此,大写转小写就是将大写字母的ASC码加20H,反之,将小写字母的ASC码减20H。
大小写字母转换功能,是通过调用子函数input实现对字符串的输入,然后调用宏gaixie来实现对大小写的转换,其中宏是通过参数的传递来确定是小写转换成大写,还是大写转换成小写的。
从而决定是对操作数进行加或减20H。
80x86从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit),执行单元由算术逻辑单元(ALU)、标志寄存器、通用寄存器组和EU控制器等部件组成。
指令执行部件EU由算术逻辑单元、标志寄存器、通用寄存器和EU控制器等部件组成。
主要功能是执行指令:一般顺序执行,EU不断地从指令队列中取指令连续执行,而省去访问存储器取指令的时间。
需要访问存储器取操作数时,EU将访问地址送给BIU后,将要等待操作数到来后才能继续操作;遇到转移类指令时,要将指令队列中的后续指令作废,等待BIU重新从存储器取出目标地址中的指令代码进入指令队列后,EU才能继续执行指令。
如何使用vba编制最大值和最小值的程序?认识简单算法思想!

如何使⽤vba编制最⼤值和最⼩值的程序?认识简单算法思想!如何实现找出⼀组数字中的最⼤值或者最⼩值
不调⽤编制好的函数⽽是利⽤算法⾃⼰编写
算法描述:
1、假定第⼀个数字为最⼤值或者最⼩值
2、将第⼀个数与后⾯的数字⼀⼀⽐较,如果第⼀个数字⽐其他数字⼤(求最⼩值)或⼩(求最
⼤值)就把两个数字换位。
3、循环⽐较⾄最后⼀个数字⽐较完成
求最⼩值
Sub smal()
Dim a
Dim c
c = Range(''a1'').CurrentRegion.Rows.Count''获取数据的⾏数
For i = 1 To c
If Cells(1, 1) > Cells(i, 1) Then''条件判断
a = Cells(1, 1)
Cells(1, 1) = Cells(i, 1)''对换位置
Cells(i, 1) = a
End If
Next
Cells(1, 3) = Cells(1, 1)''把最⼩值放⼊C1显⽰
End Sub
求最⼤值
Sub maxs()
Dim a
Dim c
c = Range(''a1'').CurrentRegion.Rows.Count
For i = 1 To c
If Cells(1, 1) < cells(i,="" 1)="">
a = Cells(1, 1)
Cells(1, 1) = Cells(i, 1)
Cells(i, 1) = a
End If。
汇编上机实验报告

实验一认识Tddebug集成操作软件实验日志指导教师曾素华实验时间:2013 年04 月02 日学院计算机科学与技术专业计算机科学与技术班级0411005 学号2010211912 姓名李新娱实验室s401一、实验题目认识Tddebug集成操作软件二、实验目的1.熟悉汇编程序的开发过程。
2.认识Tddebug集成操作软件。
3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。
4.掌握INT 21H软件中断来调用DOS内部子程序的方法三、实验内容及说明1.实验内容:数据传送实验1)编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
参见示例出程序。
2)修改此程序,采用字符串传送指令完成。
2.实验中使用DOS功能调用(INT 21H):参见教材《32位微型计算机原理与接口技术》89页(1)显示字符串入口:AH=09H调用参数:DS:DX=串首地址,‘$’为结束字符。
(2)返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验主要步骤要求一数据传送实验1.运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
3.使用Rmrun菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:3)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
4)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:●方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区●方法2:选择菜单View| Dump,弹出内存数据显示窗口。
例子:循环语句--输入N个整数,判断最大值,最小值,和,平均值。

例⼦:循环语句--输⼊N个整数,判断最⼤值,最⼩值,和,平均值。
1# coding=gbk2print("如果你想推出该程序,请输⼊'quit'!")3 min = max = sum = aver = 04 count = 25 num1 = input("请输⼊第1个数字:")6if num1 == 'quit':7print("你已退出该程序!")8else:9 num1 = int(num1)10 sum = sum + int(num1)11 max = min = aver = num112print("最⼤值,最⼩值,和,平均值均为:" + str(num1))13while count:14 num = input("请输⼊第" + str(count) + "个数字:")15if num == 'quit':16print("你已退出该程序!")17print("你⼀共输⼊了" + str(count-1) + "个整数!")18print("最⼤值:", max, "最⼩值:", min, "和:", sum,"平均值:",aver)19break20else:21 num = int(num)22if num <= max and num >= min:23pass24else:25if num > max:26 max = num27else:28 min = num29 sum += num30 aver = sum / count31 count += 132print("最⼤值:",max,"最⼩值:",min,"和:",sum,"平均值:",aver)看这个需求,不难理解,该程序的核⼼思想就是不断的⽐较,⾸先先确⽴第⼀个数字,这个数字是必须的,因为需要它与后⾯输⼊的数字做⽐较,(见5~12⾏代码)并且这第⼀个数还是特殊情况,最⼤值最⼩值和平均值都是其本⾝,完全可以单列出来。
汇编语言 三个数找出最大数

实验三找出最大数一.实验目的:1.学习并掌握数据传送指令和算术逻辑指令的用法。
2.进一步熟悉在PC机上建立、汇编、链接、调试和运行8086汇编语言源程序。
二.实验内容:某数据块DA TA1中有10个无符号数,编程找出其中的最大数,并将其送到MAX单元中。
三.实验报告:1.画出流程图;2.写出源程序;3.简要描述程序的调试过程;4.写出程序的执行结果。
流程图DA TA SEGMENTDA TA1 DW '1','7','5','4','8','6','2','6','0','4' ;要比较大小的字符MAX DW ? :定义MAX单元BUF DB'MAX:','$' ;要显示的字符DA TA ENDSSTACK SEGMENT PARA STACK 'STACK'DW 100 DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS, AXLEA DI,DA TA1 ;DI指向要比较的字符的首址MOV BL,9 ;需要比较9次MOV SI,DI ;串首地址送SINEXT1:MOV AX,[SI] ;取第一个数NiADD SI,2 ;指向下一个数NjCMP AX,[SI] ;Ni≥Nj?JC NEXT2 ;若不大于,则不交换MOV DX,[SI] ;否则,交换Ni和NjMOV [SI-2],DXMOV [SI],AXNEXT2:DEC BL ;循环结束?JNZ NEXT1 ;若未结束,则继续比较MOV DX,[DI+18]MOV [MAX],DX ;将最大数放至MAX单元中MOV DX,OFFSET BUF ;09号功能调用,显示字符串MOV AH,09H ;显示“MAX:”INT 21HMOV DX,[DI+20] ;显示MAX单元中字符MOV AH,02H ;02号功能调用,显示字符INT 21HMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START一:由于之前数据段选用的是十六进制数,在用DOS功能2号功能调用时发现程序执行后显示为一系列奇怪的字符,想到2号功能只能显示单个字符,输入的数据改为其在ASCII 码表中对应的字符输出。