汇编语言例子
精选10个汇编语言程序案例集

精选10个汇编语言程序案例集汇编语言是一种底层编程语言,直接操作计算机硬件。
在学习和研究计算机体系结构、编程理论以及进行低级优化等方面,汇编语言是非常重要的。
下面精选了一些汇编语言程序案例,以帮助初学者更好地理解和熟悉汇编语言。
1.程序:计算数组平均值这个程序接收一个包含n个整数的数组,并计算它们的平均值。
汇编语言的优势在于可以直接访问内存,并能够快速处理数据。
2.程序:反转字符串这个程序接收一个字符串作为输入,并将其反转。
使用循环和指针操作,可以高效地实现字符串的反转。
3.程序:求阶乘这个程序接收一个输入的正整数,并计算其阶乘。
使用循环和递归的方式,可以轻松实现阶乘的计算。
4.程序:排序算法实现这个程序实现了一些常见的排序算法,例如冒泡排序、插入排序和快速排序。
通过对数据进行比较和交换,可以实现对数组中元素的排序。
5.程序:查找算法实现这个程序实现了一些常见的查找算法,例如线性查找和二分查找。
通过对数组进行比较和分割,可以高效地实现对元素的查找。
6.程序:矩阵乘法这个程序接收两个矩阵作为输入,并计算它们的乘积。
通过使用循环和指针操作,可以高效地实现矩阵乘法。
7.程序:加密解密算法这个程序实现了一些加密解密算法,例如凯撒密码和DES算法。
通过对数据进行位操作和逻辑运算,可以实现对数据的加密和解密。
8.程序:图像处理算法这个程序实现了一些简单的图像处理算法,例如灰度化、边缘检测和图像缩放。
通过对像素进行操作和计算,可以实现对图像的处理。
9.程序:计算斐波那契数列这个程序接收一个输入的正整数,并计算对应位置的斐波那契数。
通过使用循环和递归的方式,可以高效地实现斐波那契数列的计算。
10.程序:位操作这个程序演示了一些常见的位操作,例如与、或、异或以及位移操作。
通过对数据进行位操作,可以实现对数据的处理和优化。
以上这些程序案例展示了汇编语言的一些基本应用和实现方式,通过学习和编写这些程序,可以更好地理解汇编语言的原理和编程技巧。
精选10个汇编语言程序案例集

精选10个汇编语言程序案例集摘要:一、汇编语言简介二、案例1:简单算术运算三、案例2:字符串处理四、案例3:逻辑与关系运算五、案例4:循环与条件语句六、案例5:函数调用与参数传递七、案例6:数组与指针操作八、案例7:内存管理九、案例8:输入输出操作十、案例9:操作系统调用十一、案例10:网络编程十二、总结与拓展正文:一、汇编语言简介汇编语言是一种低级编程语言,它与计算机硬件的操作紧密相关。
汇编语言通过对计算机指令进行汇编,实现对计算机资源的控制。
下面将介绍10个汇编语言程序案例。
二、案例1:简单算术运算案例1是一个实现加减乘除算术运算的汇编程序。
通过编写相应的汇编指令,实现对两个整数的加减乘除操作。
三、案例2:字符串处理案例2是一个处理字符串的汇编程序。
通过汇编指令实现字符串的输入、输出、查找、替换等功能。
四、案例3:逻辑与关系运算案例3是一个处理逻辑与关系运算的汇编程序。
通过汇编指令实现逻辑与、逻辑或、逻辑非以及关系运算。
五、案例4:循环与条件语句案例4是一个处理循环与条件语句的汇编程序。
通过汇编指令实现for、while、if-else等循环与条件控制结构。
六、案例5:函数调用与参数传递案例5是一个处理函数调用与参数传递的汇编程序。
通过汇编指令实现函数调用,以及将参数传递给函数。
七、案例6:数组与指针操作案例6是一个处理数组与指针操作的汇编程序。
通过汇编指令实现数组的创建、访问、排序等操作,以及指针的运算与控制。
八、案例7:内存管理案例7是一个处理内存管理的汇编程序。
通过汇编指令实现内存的分配、释放、拷贝等操作。
九、案例8:输入输出操作案例8是一个处理输入输出操作的汇编程序。
通过汇编指令实现键盘输入、显示输出等功能。
十、案例9:操作系统调用案例9是一个处理操作系统调用的汇编程序。
通过汇编指令实现操作系统提供的功能,如文件操作、进程管理等。
十一、案例10:网络编程案例10是一个处理网络编程的汇编程序。
汇编语言编程实例

汇编语言编程实例一、引言汇编语言是计算机硬件和软件之间的桥梁,它是一种低级语言,可以直接控制计算机硬件。
汇编语言编程可以让程序员更加深入地理解计算机的工作原理,从而实现更高效的程序。
本文将介绍几个汇编语言编程实例,涉及到基本的输入输出、循环、条件判断、数组等知识点。
在这些实例中,我们将使用NASM汇编器进行编译和链接。
二、基本输入输出1. 输出字符串在汇编语言中,我们可以使用系统调用来进行输入输出操作。
在Linux 系统中,输出字符串的系统调用为write。
下面是一个输出字符串的示例程序:```section .datamsg db 'Hello, World!',0xa ;定义一个字符串len equ $-msg ;获取字符串长度section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 1 ;exit系统调用号为1xor ebx, ebx ;退出状态码为0int 0x80 ;调用系统调用退出程序```2. 输入数字类似地,在Linux系统中,输入数字的系统调用为read。
下面是一个输入数字的示例程序:```section .datamsg db 'Please enter a number: ',0xa ;提示信息len equ $-msg ;获取字符串长度buf resb 1 ;定义一个字节的缓冲区section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 3 ;read系统调用号为3mov ebx, 0 ;文件描述符为0(标准输入)mov ecx, buf ;缓冲区地址mov edx, 1 ;要读取的字节数int 0x80 ;调用系统调用sub al, '0' ;将ASCII码转换成数字值```三、循环和条件判断1. 计算1到100的和下面是一个计算1到100的和的示例程序,其中使用了循环和条件判断:```section .datasum dd 0 ;定义一个双精度浮点型变量sumsection .textglobal _start_start:xor eax, eax ;eax清零,作为计数器和累加器使用loop_start:inc eax ;eax自增1,相当于i++cmp eax, 100+1 ;比较i是否大于100,注意要加1je loop_end ;如果i等于101,跳转到loop_endadd dword [sum], eax ;将i加到sum中jmp loop_start ;跳转到loop_startloop_end:mov eax, dword [sum] ;将sum赋值给eax,作为返回值mov ebx, 1 ;exit系统调用号为1int 0x80 ;调用系统调用退出程序```2. 判断一个数是否为素数下面是一个判断一个数是否为素数的示例程序,其中使用了循环和条件判断:```section .datamsg db 'Please enter a number: ',0xa ;提示信息len equ $-msg ;获取字符串长度buf resb 1 ;定义一个字节的缓冲区section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 3 ;read系统调用号为3mov ebx, 0 ;文件描述符为0(标准输入)mov ecx, buf ;缓冲区地址mov edx, 1 ;要读取的字节数int 0x80 ;调用系统调用sub al, '0' ;将ASCII码转换成数字值check_prime:xor ebx, ebx ;ebx清零,作为除数使用mov ecx, eax ;将eax的值赋给ecx,作为被除数使用inc ebx ;将ebx自增1,相当于除数加1cmp ebx, ecx ;比较除数是否大于被除数jge is_prime ;如果除数大于等于被除数,跳转到is_prime xor edx, edx ;edx清零,作为余数使用div ebx ;将ecx/ebx的商放在eax中,余数放在edx中 cmp edx, 0 ;判断余数是否为0je not_prime ;如果余数为0,跳转到not_primejmp check_prime ;跳转到check_primenot_prime:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, not_prime_msg ;要输出的字符串地址mov edx, not_prime_len ;要输出的字符数int 0x80 ;调用系统调用exit:mov eax, 1 ;exit系统调用号为1xor ebx, ebx ;退出状态码为0int 0x80 ;调用系统调用退出程序not_prime_msg db 'The number is not prime.',0xa ;提示信息not_prime_len equ $-not_prime_msgis_prime:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, is_prime_msg ;要输出的字符串地址mov edx, is_prime_len ;要输出的字符数int 0x80 ;调用系统调用jmp exit ;跳转到exitis_prime_msg db 'The number is prime.',0xa ;提示信息is_prime_len equ $-is_prime_msg```四、数组1. 计算数组的和下面是一个计算数组的和的示例程序:```section .dataarr dd 1, 2, 3, 4, 5 ;定义一个双精度浮点型数组arrn equ ($-arr)/4 ;获取数组长度section .textglobal _start_start:xor eax, eax ;eax清零,作为计数器和累加器使用xor ecx, ecx ;ecx清零,作为数组下标使用loop_start:cmp ecx, n ;比较ecx是否大于等于njge loop_end ;如果ecx大于等于n,跳转到loop_endadd eax, dword [arr+ecx*4] ;将arr[ecx]加到eax中inc ecx ;将ecx自增1,相当于下标加1jmp loop_start ;跳转到loop_startloop_end:mov ebx, eax ;将sum赋值给ebx,作为返回值mov eax, 1 ;exit系统调用号为1xor ecx, ecx ;退出状态码为0int 0x80 ;调用系统调用退出程序```2. 查找数组中的最大值下面是一个查找数组中的最大值的示例程序:```section .dataarr dd 10,20,30,-40,-50,-60,-70,-80,-90,-100 ;定义一个双精度浮点型数组arrn equ ($-arr)/4 ;获取数组长度section .textglobal _start_start:mov eax, dword [arr] ;将arr[0]赋值给eax,作为最大值使用xor ecx, ecx ;ecx清零,作为数组下标使用loop_start:cmp ecx, n ;比较ecx是否大于等于njge loop_end ;如果ecx大于等于n,跳转到loop_endcmp eax, dword [arr+ecx*4] ;比较eax和arr[ecx]jge loop_next ;如果eax大于等于arr[ecx],跳转到loop_next mov eax, dword [arr+ecx*4] ;将arr[ecx]赋值给eax,更新最大值loop_next:inc ecx ;将ecx自增1,相当于下标加1jmp loop_start ;跳转到loop_startloop_end:mov ebx, eax ;将max赋值给ebx,作为返回值mov eax, 1 ;exit系统调用号为1xor ecx, ecx ;退出状态码为0int 0x80 ;调用系统调用退出程序```五、总结本文介绍了几个汇编语言编程实例,涉及到基本的输入输出、循环、条件判断、数组等知识点。
汇编语言例

1读寄存器内容的源代码我的环境是WINXP+MASM5.0通过编译生成可执行文件,双击,提示写入文件成功,按任意键推出。
在程序的同一目录下的TEMP.TXT中已经写入了:ABCD46454F5BFFFF四行用来测试而显示送入寄存器的值。
以下是完整的代码,MovToVar Macro m_Reg,Asc_AXmov bx,m_Regcall ConvertToAsclea si,CAsciilea di,Asc_AXmov cx,4drep movsbEndMdata segmentmAX dw0mBX dw0mCX dw0mDX dw0AscAX db4dup(?),0dh,0ahAscBX db4dup(?),0dh,0ahAscCX db4dup(?),0dh,0ahAscDX db4dup(?),0dh,0ahWriteBytes EQU$-AscAXCAscii db5dup(?);临时存放转化结果filename db'temp.txt$',0hfilehandle dw?ferr_num1db'Error occurred when create file!$'ferr_num2db'Write file error!$'tssaveok db'Write register value to file success.$' tsexit db'Press any key to exit...$'data endsCode segmentassume cs:code,ds:data,es:dataMain proc farstart:push dssub ax,axmov ax,datamov ds,axmov es,axsub ax,axmov ax,0ABCDh;四个测试数据mov bx,4645hmov cx,4F5Bhmov dx,0FFFFhcall SaveRegToMemcall MovAll call SaveToFilecall NextLinelea dx,tsexitcall ShowStringwaittoexit:mov ah,0hint16hexitprogram:mov ah,4chint21hMain EndpMovAll proc nearpush axpush bxpush cxpush dxMovToVar mAX,AscAXMovToVar mBX,AscBXMovToVar mCX,AscCXMovToVar mDX,AscDXpop dxpop cxpop bxpop axretMovAll endpSaveRegToMem proc nearmov mAX,axmov mBX,bxmov mCX,cxmov mDX,dxretSaveRegToMem endpShowString proc near;显示DX所指的字符串push axmov ah,09hint21hpop axretShowString endpNextLine proc near;回车换行mov ah,02hmov dl,0dhint21hmov ah,02hmov dl,0ahint21hretNextLine endpConvertToAsc proc near;参数为BX;将BX中的二进制数据转化成相应的ASCII码,;并将结果保存到CAscii[]PUSH AXPUSH CXPUSH DXmov bp,0hmov ch,4hxh:mov cl,4hrol bx,clmov al,bland al,0fhadd al,30hcmp al,3ah;whether>'9'(Ascii:49)jl toCascii;if not then store to CAsciiadd al,7h;if yes then convert it to asciitoCascii:mov CAscii[bp],alinc bpdec chjnz xhmov CAscii[bp],'$'POP DXPOP CXPOP AXretConvertToAsc endpSaveToFile PROC NEAR;保存内存中的数据到文件中mov ah,3chmov cx,0hlea dx,filenameint21h;建立文件jc ferr1;如果建立出错,跳转到显示相应信息mov filehandle,ax;文件代号存放入内存变量mov ah,40hmov bx,filehandlemov cx,WriteBytes;将要写入文件的字节数送入CX lea dx,AscAXint21h;向文件写入以记录首地址开始的AX个字节jc ferr1;如果写入错误,则跳转到显示相关信息处cmp ax,WriteBytes;如果写入文件的实际字节数不是要求写入的字节数jne ferr2;则显示跳转到显示出错信息mov bx,filehandlemov ah,3ehint21h;关闭文件lea dx,tssaveokcall showstringcall nextlineretferr1:lea dx,ferr_num1call showstringcall nextlineretferr2:lea dx,ferr_num2call showstring call nextlineretSaveToFile ENDPCode endsend start2汇编语言制作的光带菜单及源程序(1.0)这个是我上大二的时候的汇编语言课程设计。
单片机汇编语言设计实例详解

单片机汇编语言设计实例详解引言:单片机是嵌入式系统中常见的控制器,它具有体积小、功耗低、成本低等特点,被广泛应用于家电、汽车、工业控制等领域。
而汇编语言作为单片机的底层语言,直接操作硬件资源,具有高效性和灵活性。
本文将以一个实例,详细讲解如何使用单片机汇编语言进行设计。
实例背景:假设我们要设计一个温度检测系统,要求实时监测环境温度,并在温度超过某个阈值时触发报警。
硬件准备:1. 单片机:我们选择一款常用的8051单片机作为例子。
2. 温度传感器:我们选择一款数字温度传感器,它可以通过串行通信与单片机进行数据交互。
3. 显示屏:为了方便实时显示温度信息,我们选用一款数码管显示屏。
软件准备:1. Keil C51:这是一款常用的单片机开发软件,支持汇编语言的编写和调试。
2. 串口调试助手:用于测试串口通信功能。
设计步骤:1. 硬件连接:将单片机与温度传感器、显示屏连接起来。
注意接线的正确性和稳定性。
2. 编写初始化程序:使用汇编语言编写单片机的初始化程序,包括端口初始化、中断向量表设置、定时器初始化等。
3. 串口通信设置:通过串口与温度传感器进行数据交互,需要设置串口通信的波特率、数据位数、停止位等参数。
4. 温度检测程序:编写汇编语言程序,实时读取温度传感器的数据,并将数据送至显示屏进行显示。
5. 温度报警程序:在温度超过设定阈值时,触发报警程序,可以通过蜂鸣器等外设发出警报信号。
6. 调试与测试:使用Keil C51进行程序调试,通过串口调试助手测试串口通信和温度显示、报警功能。
设计思路:1. 初始化程序设计:先设置端口的输入输出方向,再设置中断向量表,最后初始化定时器。
这样可以确保程序的稳定性和可靠性。
2. 串口通信设置:根据温度传感器的通信协议,设置串口的波特率、数据位数、停止位等参数。
注意要与传感器的通信规范保持一致。
3. 温度检测程序设计:通过串口读取温度传感器的数据,并进行相应的处理。
单片机汇编语言经典一百例

单片机汇编语言经典一百例汇编语言是一种底层的程序设计语言,是一种将汇编指令直接翻译成机器指令的语言。
在单片机编程中,掌握汇编语言是非常重要的,因为它可以充分发挥单片机的性能,并且提高程序的运行效率。
本文将介绍一百个经典的单片机汇编语言例子,帮助读者更好地理解汇编语言的使用。
1. 点亮LED灯```ORG 0x0000 ; 程序起始地址MOV P1, #0xAA ; P1口输出高电平,LED灯点亮END ; 程序结束```2. LED流水灯效果```ORG 0x0000 ; 程序起始地址MOV P1, #0x01 ; P1口输出低电平,第一个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x02 ; P1口输出低电平,第二个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x04 ; P1口输出低电平,第三个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x08 ; P1口输出低电平,第四个LED点亮CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```3. 数码管动态扫描显示```ORG 0x0000 ; 程序起始地址CLR P0.0 ; P0.0口输出低电平,选择第一个数码管MOV P2, #0x7E ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.1 ; P0.1口输出低电平,选择第二个数码管MOV P2, #0x30 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.2 ; P0.2口输出低电平,选择第三个数码管MOV P2, #0x6D ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.3 ; P0.3口输出低电平,选择第四个数码管MOV P2, #0x79 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```...通过以上例子,我们可以看到单片机汇编语言的应用非常广泛,可以实现各种各样的功能。
汇编语言程序设计实例

汇编语言程序设计实例汇编语言是一种非常底层的编程语言,它允许程序员直接与计算机硬件进行交互。
汇编语言程序设计通常用于需要高性能或者对硬件有特定需求的场合。
以下是一些汇编语言程序设计的实例,以帮助理解其基本结构和应用。
实例一:数据传输在汇编语言中,数据传输是最基本的操作之一。
以下是一个简单的数据传输程序实例,它将一个立即数(即直接给出的数值)移动到寄存器中:```assemblymov ax, 1234h ; 将十六进制数1234h移动到ax寄存器```实例二:算术运算汇编语言支持基本的算术运算,如加法、减法、乘法和除法。
以下是一个进行加法运算的例子:```assemblymov ax, 5 ; 将数值5移动到ax寄存器add ax, 3 ; 将数值3加到ax寄存器中```实例三:条件跳转条件跳转是控制程序流程的重要手段。
以下是一个基于条件跳转的简单程序,它检查ax寄存器的值是否为0,并根据结果跳转到不同的代码段:```assemblymov ax, 0 ; 将数值0移动到ax寄存器jz zero ; 如果ax为0,则跳转到标签zero; 继续执行其他代码...zero:; 如果ax为0,执行这里的代码```实例四:循环结构循环结构在汇编语言中实现起来较为复杂,但可以通过重复使用跳转指令来模拟。
以下是一个简单的循环结构实例,它将ax寄存器的值减1,直到值为0:```assemblystart_loop:dec ax ; 将ax寄存器的值减1jnz start_loop ; 如果ax不为0,跳回start_loop```实例五:字符串处理汇编语言程序设计中,字符串处理是一个常见的任务。
以下是一个将字符串从源地址复制到目标地址的程序:```assemblymov si, source ; 将源字符串的地址移动到si寄存器mov di, dest ; 将目标地址移动到di寄存器mov cx, length ; 将字符串的长度移动到cx寄存器copy_loop:movsb ; 从si复制一个字节到diloop copy_loop ; 减少cx的值并重复循环直到cx为0```实例六:子程序调用在汇编语言中,子程序是一种将代码封装成模块化单元的方法。
单片机汇编语言入门实例

一、用单片机控制发光二极管图1为单片机控制发光二极管的实验电路图。
图中用P1口作为输出端,P1口的P1.0~P1.7引脚分别接了8个LED。
实例1:用单片机控制LED闪烁发光源程序如下:MAIN:SETB P1.0LCALL DELAYCLR P1.0LCALL DELAYLJMP MAINDELAY:MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND程序说明:1、SETB P1.0:将P1.0口置“1”,既让P1.0输出高电平,让LED 熄灭。
2、LCALL DELAY:LCALL称为子程序调用指令,指令后面的参数DELAY是一个标号,用于标识第6行程序,执行LCALL指令时,程序转到LCALL后面的标号所指示的程序行处执行,如果执行指令过程中遇到RET指令,则程序就返回到LCALL指令下面的一条指令继续执行。
3、CLR P1.0:将P1.0口置“0”,既让P1.0输出低电平,让LED 亮。
4、LCALL DELAY:调用延时子程序DELAY。
5、LJMP MAIN:跳转到第1条指令处执行第1条指令。
6、第6~10条指令是一段延时子程序,子程序只能在被调用时运行,并有固定的结束指令RET。
7、END:不是S51单片机的指令,不会产生单片机可执行的代码,而是用于告诉汇编软件“程序到此结束”,这类用于汇编软件控制的指令称为“伪指令”。
延时程序说明:1、程序中的R6、R7代表工作寄存器的单元,用来暂时存放一些数据。
2、MOV指令的含义是传递数据。
指令“MOV R7,#250”的含义是:将数据250送到R7中。
250前面的“#”号表示250是一个数,而不是一个地址,“#”号后面的数称为立即数。
3、DJNZ指令后面有两个符号,一个是R6,一个是D2。
R6是寄存器,D2是标号。
DJNZ指令的执行过程是:将其后面第一个参数中的值减1,然后看这个值是否等于0,如果等于0,往下执行,如果不等于0,则转移到第二个参数所指定的位置去执行,这里是转移到由D2所标识的这条语句去执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三:1)题目:在内存中从ARRAY开始的连续三个字节单元存放着30H,40H,50H。
编制程序将这三个连续的数据传送到内存TABLE开始的单元。
DATA SEGMENTARRAY DB 30H,40H,50H 定义数据段TABLE DB 3 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,ARRAYLEA DI,TABLEMOV CX,3REP MOVSBJMP $CODE ENDSEND START(2)题目:把内存2000H和3000H字单元的内容相加,结果存入4000H单元。
(不考虑溢出)DATA SEGMENTORG 2000HDW 1234HORG 3000HDW 5678HORG 4000HDW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,[2000H]ADD AX,[3000H]MOV [4000H],AXJMP $CODE ENDSEND START实验四1、数据传送指令和算术运算指令完成NUM1和NUM2相加,结果放入SUM中。
DATA SEGMENTNUM1 DW 0012H,0030H,0FC21H ; 数1NUM2 DW 3E81H,44E9H,6D70H ; 数2SUM D W 3 DUP(?) ; 结果单元DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV CX,3LEA SI,NUM1LEA DI,NUM2LEA AX,SUMHE:MOV BX,[SI]ADD BX,[DI]MOV [AX],BXINC SIINC DIINC AXLOOP HEMOV AH, 4CH ; 返回DOSINT 21HCODE ENDSEND START2、内存中自TABLE开始的七个单元连续存放着自然数0至6的立方值(称作立方表)。
;任给一数X(0≤X≤6)在XX单元,查表求X的立方值,并把结果存入YY单元中。
;提示用XLAT指令DATA SEGMENTTABLE DB 0H,1H,2H,3H,4H,5H,6HXX DB 1DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA BX,TABLEMOV AL,[XX]XLATMOV DL,ALMOV AH,02HINT 21HJMP $CODE ENDSEND START实验五2、输入一个字符,如果等于'Y',则输出Assemble,否则输出Others。
DATA SEGMENTSTR1 DB 'Assemble'STR2 DB 'Others'CODE SEGMENTSTART:MOV AH,01HINT 21HCMP AL,'Y'JZ HELEA DX,STR2MOV AH,9INT 21HJMP EXTHE:LEA DX,STR1MOV AH,9INT 21HEXT:JMP $CODE ENDSEND START3、编写汇编程序,(Z-(X*Y)-100)/X。
已知X、Y、Z均为8位符号数,已经分别装在X、Y、Z单元中,将计算结果商存入100H中,余数存入200H中。
DATA SEGMENTX DB 10HY DB 20HZ DB 40HORG 100HNUM1 DB ?ORG 200HNUM2 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,[Y]MOV BL,[X]MOV BH,[Z]MUL BLSUB AX,64HMOV DX,AXMOV AL,BHCBWSUB AX,DXDIV BLMOV NUM1,ALMOV NUM2,AHJMP $CODE ENDSEND START4、编写汇编程序,已知X为8位符号数,装在X单元中,请求出X补码并存入Y单元中。
DATA SEGMENTX DB 88HY DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,[X]TEST AL,0JG HENEG ALOR AL,80HHE:MOV [Y],ALJMP $CODE ENDSEND START16 7 112 123 111、已知X单元存放了无符号整数123,请用程序把123输出。
DATA SEGMENTX DB 7BHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,[X]DIV 0AHMOV BH,AHCBWDIV 0AHMOV BL,AHMOV DL,ALMOV AH,2INT 21HMOV DL,BLMOV AH,2INT 21HMOV DL,BHMOV AH,2INT 21HJMP $CODE ENDSEND START2、已知在Y单元中FF884455H这样一个数据,请用位转移指令把数据存放为F884455FH DATA SEGMENTY DB 55H,44H,88H,0FFHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,YMOV AX,[SI]MOV BX,[SI+2]TEST AX,8000HJZ NEXTSTCJMP NEXT1NEXT:CLCNEXT1:RCL BX,1RCL AX,1RCL BX,1RCL AX,1RCL BX,1RCL AX,1RCL BX,1RCL AX,1CODE ENDSEND START3、讲解loop的使用,完成1+2+3+……+100的程序。
CODE SEGMENTSTART:MOV CX 100MOV AX,1MOV BX,0HE:ADD BX,AXINC AXLOOP HECODE ENDSEND START1.有一字符串'I am a student$'存在0100H地址开始的存储空间,请分别用串操作指令MOVSB 和循环指令把字符串存到0200H地址开始的存储空间。
DATA SEGMENTORG 100HSTR DB 'I am a student$'ORG 200GSTR1 DB 14 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,14LEA SI,STRLEA DI,STR1HE: MOV AX,[SI]MOV [DI],AXINC SIINC DILOOP HEJMP $CODE ENDSEND STARTDATA SEGMENTORG 100HSTR DB 'I am a student$'ORG 200GSTR1 DB 14 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,14LEA SI,STRLEA DI,STR1REP MOVSBJMP $CODE ENDSEND START2.有10个有符号数33H,12H,30H,0FCH,21H,3EH,81H,44H,0E9H,7DH;存在NUM开始的空间中,统计偶数的个数、大于0的个数,及最大值。
DATA SEGMENTNUM DB 33H,12H,30H,0FCH,21H,3EH,81H,44H,0E9H,7DHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,NUMMOV CX,10MOV DL,[NUM]MOV BL,0MOV BH,0MOV AL,[SI]TEST AL,1HJNZ NEXTINC BHNEXT:CMP AL,0JNZ NEXT1INC BLNEXT1:CMP DL,[SI]JG EXTMOV DL,[SI]EXT:INC SILOOP HECODE ENDSEND START3.有一字符串'1I5am3a4stu9de6n7t$',利用程序计算出字符串中的数字之和并把结果放入BX 中。
DATA SEGMENTNUM DB '1I5am3a4stu9de6n7t$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,NUMMOV BX,0HE:MOV AX,[SI]CMP AX,'$'JZ EXTCMP AX,'0'JL NEXTCMP AX,'9'JG NEXTADD BX,AXNEXT:LOOP HEJMP $CODE ENDSEND START1.有一字符串'Hello to MASM!20150530'存在0100H地址开始的存储空间,请把字符串中的小写改成大写,大写改成小写,新的字符串存入0200H开始的存储空间。
DATA SEGMENTORG 100HNUM DB 'Hello to MASM!20150530$'ORG 200HNUM1 DB 22 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,NUMLEA DI,NUM1MOV AL,[SI]CMP AL,'$'JZ EXTCMP AL,'A'JL NEXTCMP AL,'Z'JG NEXT1ADD AL,20HJMP NEXTNEXT1CMP AL,'a'JL NEXTCMP AL,'z'JG NEXTSUB AL,20HNEXT:MOV [DI],ALINC SIINC DILOOP HEEXT:JMP $CODE ENDSEND START2.有10个有符号数33H,12H,30H,0FCH,21H,3EH,81H,44H,0E9H,7DH;存在NUM开始的空间中,请把它们从大到小排序。