精华内容
下载资源
问答
  • 汇编语言循环程序设计
    2021-11-27 13:51:37

    循环控制指令

    80x86指令系统中,有三条专门的循环控制指令:
    属于程序转移类指令,也是相对转移。
    相对位移量是8位以补码表示的二进制带符号整数。
    隐含使用寄存器CX作循环次数计数器。在进入循环前,把循环次数送入CX。执行循环控制指令时,对CX进行减1计数
    LOOP指令:
    格式:LOOP 目标地址
    功能:CX <==(CX)-1;
    若(CX)≠0,转移到目标地址,继续循环;
    否则( CX)=0 )退出循环顺序执行。

    实例1

    把字符串中大写改成小写

    DATA SEGMENT ;设置数据段
    STRING DB  41H,42H,0H
    BX DW ?
    DATA ENDS
    STACK1 SEGMENT PARA STACK  ;设置堆栈
                   DW 20H DUP(0)
     STACK1 ENDS
     CODE SEGMENT              ;设置代码段
                ASSUME CS: CODE, DS: DATA, SS: STACK1
    AGAIN:      MOV	AX, DATA   ;置段基指于DS
                MOV DS,AX		
    			MOV BX,OFFSET STRING
    			MOV AL,[BX]   ;取一个字符
    			OR  AL,AL     ;是否为结尾符0
    			JZ  DONE      ;是,退出循环
    			CMP AL,'A'    ;是否为大写A~Z
    			JB NEXT       ;CF=1 AND ZF=0 时跳转到NEXT,否则继续执行
    			CMP AL,'Z'
    			JA NEXT
    			OR AL,20H    ;A和a相差20H,是大写转换为小写
    			MOV [BX],AL
    NEXT: 		INC BX
    			JMP AGAIN
    DONE:
    			MOV AH,4CH     ;调用4CH功能,4CH功能号
                INT 21H        ;终止程序
     CODE ENDS
          END AGAIN
    

    实例2

    1~100求和

    DATA SEGMENT ;设置数据段
    SUM DW ?
    DATA ENDS
    STACK1 SEGMENT PARA STACK  ;设置堆栈
                   DW 20H DUP(0)
    STACK1 ENDS
    CODE SEGMENT              ;设置代码段
                ASSUME CS: CODE, DS: DATA, SS: STACK1
    STATA:      MOV	AX, DATA   ;置段基指于DS
                MOV DS,AX	
                XOR AX,CX
                MOV CX,100
    AGAIN:      ADD AX,CX    ;从100,99,........,2,1倒序累加
                LOOP AGAIN   ;CX <==(CX)-1
                MOV SUM,AX
                MOV AH,4CH
    			INT 21H
    CODE:	ENDS
    		END STATA
    
    更多相关内容
  • 汇编语言循环程序设计,内包含了循环程序设计的题目和asm文件,asm文件可以用记事本打开。
  • 汇编语言程序设计实验报告二分支循环程序实验 实验目的 掌握分支...编写一程序将内存中某一区域的数据传送到另一区域要求考虑数据块重叠问题 实验准备 预习数据传送指令熟悉分支和循环程序设计方法 预习DEBUG调试程序
  • 汇编循环程序设计

    千次阅读 2020-06-22 01:06:13
    循环程序设计 一、 实验目的: 掌握汇编语言循环程序编写的基本方法。 理解高级语言中的循环的实现方式。 理解循环程序对性能的一些影响因素。 二、 实验内容 C语言函数voidmemset(voids,intch,size_tn);是将s中...

    循环程序设计

    一、 实验目的:

    1. 掌握汇编语言循环程序编写的基本方法。
    2. 理解高级语言中的循环的实现方式。
    3. 理解循环程序对性能的一些影响因素。

    二、 实验内容

    1. C语言函数voidmemset(voids,intch,size_tn);是将s中当前位置后面的n个字节用ch替换,通常用于在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
      编写程序实现类似以上函数的功能(不写成函数形式),将指定的内存中连续N个字节填写成指定的内容,要求:
    1. 每次填写一个字节
    2. 每次填写一个字
    3. 分别用LOOP指令、条件(无条件)转移指令分别实现以上的操作
    1. 请用冒泡算法对逻辑地址为8000:0000h开始的16个字节排序,要求:
    1. 冒泡排序的内层循环和外层循环均用LOOP指令实现
    2. 16个字节数据请分别考虑为符号数和无符号数
    1. 编写汇编程序完成以下的C语言代码提供的功能(break;continue)
      int i=0;
      int sum=0;
      for(;😉
      {
      i++;
      if(i<30)continue;
      sum+=i;
      if(sum>1000)break;
      }

    三、 实验过程

    include io32.inc
    .data
    			s byte 8 dup(0)
    			n dword 6
    			cc byte '8'
    			
    			
    .code
    start:		;显示原来的s
    			mov eax,offset s
    			call dispmsg 
    			
    			;初始化数据
    			xor ecx,ecx
    			mov ecx,n
    			xor esi,esi
    			mov al,cc
    
    			;循环赋值
    		again:
    			mov byte ptr s[esi],al
    			inc esi
    
    		next:loop again
    
    		;改变后的s
    		    mov eax,offset s
    		     call dispmsg
    			
    	exit 0
    end start
    
    include io32.inc
    .data
    			s byte 8 dup(0)
    			n dword 6
    			cc word '13'
    			
    			
    .code
    start:		;显示原来的s
    			mov eax,offset s
    			call dispmsg 
    			
    			;初始化数据
    			xor ecx,ecx
    			mov ecx,n
    			xor esi,esi
    			mov ax,cc
    
    			;循环赋值
    		again:
    			mov word ptr s[esi],ax
    			inc esi
    			inc esi
    		next:loop again
    
    		;改变后的s
    		    mov eax,offset s
    		     call dispmsg
    			
    	exit 0
    end start
     
    2. include io32.inc
    .data
    			    
    			   s byte 0,1,2,3,4,5,6,7,8,9,0AH,0BH,0CH,0DH,0EH,0FH
    .code
    start:		;循环前
    			    xor eax,eax
    				xor ebx,ebx
    				mov ecx,16
    				again:
    				mov al,byte ptr s[ebx]
    				call dispuid
    
    				mov al,0
    				call dispc
    
    				inc ebx
    				next:loop again
    			;嵌套循环
    				xor ebx,ebx          
    				mov ecx,16
    				againw:
    				xor edx,edx           
    				push ecx
    				sub ecx,ebx
    				againn:
    				mov al,byte ptr s[edx]
    				mov ah,byte ptr s[edx+1]
    				cmp al,ah
    				jae lable
    				
    				mov byte ptr s[edx],ah
    				mov byte ptr s[edx+1],al
    				
    				lable:inc edx
    				nextn:loop againn
    				pop ecx
    				inc ebx
    				nextw:loop againw
    
    				;循环后
    			    xor eax,eax
    				xor ebx,ebx
    				mov ecx,16
    				againh:
    				mov al,byte ptr s[ebx]
    				call dispuid
    
    				mov al,32
    				call dispc
    
    				inc ebx
    				nexth:loop againh
    			
    	exit 0
    end start
     
    
    include io32.inc
    .data
    			a dword 0
    			sum dword 0
    .code
    start:			
      
    			xor eax,eax
    			xor ebx,ebx
    			mov eax,a
    			mov ebx,sum
    		again:
    			inc eax
    			cmp eax,30
    			jb again
    			add ebx,eax
    			cmp ebx,1000
    			ja done
    			jmp again
    		done:
    			mov a,eax
    			mov sum,ebx
    
    			mov eax,sum
    			call dispuid
    	exit 0
    end start
    
    展开全文
  • 循环与子程序汇编语言程序设计实验
  • 单元二 PHP开发基础 2.6 流程控制结构;do-while语法格式;知识应用举例;常见问题;小结练习;主讲张俊晖
  • 汇编语言中常见的形式有:顺序程序设计,分支程序设计,循环程序设计以及子程序设计 1.今天通过实例来详细说明分支程序设计,和循环程序设计 分支程序设计实例 给定一下符号函数: 给定X值,假设为-25,且存放...

    汇编语言中常见的形式有:顺序程序设计,分支程序设计,循环程序设计以及子程序设计
    今天通过实例来详细说明分支程序设计,和循环程序设计
    1.分支程序设计
    根据不同的条件做出不同的处理,把不同的方法编织成各自的处理程序段,运行时由机器根据不同的条件自动做出选择判断。绕过某些指令,仅执行相应的处理程序段。按这种方法处理成为分支结构。
    分支程序是机器利用改变标志位的指令和转移指令来实现的。
    分支程序设计实例
    给定以下符号函数:
    在这里插入图片描述

    给定X值,假设为-25,且存放于X单元,函数值Y存放于Y于单元,根据给定的X值确定Y得值
    程序如下

    
    
    
    
    DATAX    SEGMENT
     x  DB-25
     y DB?
     DATAX     ENDS
     CODEX   SEGMENT
     	MAIN 	PROC 	FAR
     		ASSUME CS:CODEX, DS:DATAX
     	START:	PUSH 	DS
     			MOV	 AX,	0
     			PUSH 	AX
     			MOV	AX,	DATAX
     			MOV	DS,	AX
     			MOV	AL,	x
     			CMP	AL,	0
     			JGE 	LOOP1
     			MOV	AL,	OFFH
     			MOV	y,	AL
     			RET
     		LOOP1:	JE	LOOP2
     			MOV	AL,	1
     			MOV	Y,	AL
     			RET
     		LOOP2:	MOV	AL,	0
     			MOV	y,	AL
     			RET
     		MAIN 	ENDP
     	CODEX 	ENDS
     		END	START
    
    
    

    2.循环程序设计
    (1)计数控制循环(限于循环次数已知)
    该方法简单直观易于程序设计
    (2)用条件控制循环
    无法确定循环次数的时候用该方法
    下面通过实例讲解

     	
    
    
    DATAS	SEGMENT
     	n	DW?
     	sum	DW?
     	DATAS	ENDS
     	CODES 	SEGMENT
     		MAIN	PROC	FAR
     			ASSUME	CS:	CODES,	DS:	DATAS
     		START:	PUSH	DS
     			MOV	AX,	0
     			PUSH	AX
     			MOV	AX,	DATAS
     			MOV	DS,	AX
     			MOV	AX,	0
     			MOV	BX,	0
     			MOV	CX,	0
     		LOOPT: 	INC 	BX
     			ADD	AX,	BX
     			INC	CX
     			CMP 	AX.	1000
     			JBE	LOORT
     			MOV	n,	CX
     			MOV	sum,	AX
     			RET
     		MAIN 	ENDP
     		CODES	ENDS
     			END	START
    

    问渠哪得清如许?为有源头活水来!
    持续不断地输入,才会厚积薄发!
    有遗漏的地方大家指正。一定第一时间修改!

    展开全文
  • 本次实验的内容延续第一次实验内容,将 BCD 码转换为二进制码,相关内 容参看第一次实验中的表格。 在各种智能仪器和信息处理中,人们总习惯于十进制数来表示信息。但是绝 大多数计算机没有十进制运算指令(仅有十...
  • 循环程序,只要学过C的人都知道循环的重要性。个人觉得汇编中的循环比C,C++的都简单,只要掌握那几条循环控制指令就好
  • 这是武汉理工大学汇编语言设计实验报告!为whuters提供无微不至的人文主义关怀和亲切的慰问! 这是武汉理工大学汇编语言设计实验报告!为whuters提供无微不至的人文主义关怀和亲切的慰问! 这是武汉理工大学汇编语言...
  • 汇编程序设计中的循环程序设计,里面含有步骤、截图、报告
  • 华南师范大学计算机学院汇编语言循环程序设计
  • 实验五 循环程序设计一 实验类型:验证性 实验目的: 1、掌握循环程序的设计方法 2、学会针对不同的问题,选用不同的组织循环的方法。 实验步骤: 1、进入DOS环境 2、输入命令:path c:\windows\...
  • 实验一:汇编语言源程序的输入 实验目的 1.通过实验了解和熟悉微机系统的配置。 2.学习在DEBUG状态下输入汇编源程序的方法。...进一步掌握分支程序和循环程序的编写方法。 实验五:实验目的 进一步熟悉排序方法
  • 1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,...

    实验目的

    1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。

    2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。

    3、初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。

    实验内容

    1. 计算1+2+3+…+10,将结果显示在屏幕上。
    2. 利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF  DB  10  DUP(?)。编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
    3. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能。(选作)
    4. 对于第2题,若要求输入的是两位数,又该怎么办?(选作)

    设计思想

    1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余   AL是商,AH是余数,后加上30h。

    2、使用SI寄存器,用于在存储器中寻址。利用循环输入10个数字,将10个数比较,大的放在AL,小的放在BL。利用01H号功能,输出。

    3、结合第1题和第2题。

    4、修改输入。

    程序代码

    1

    code segment
    	main proc far
    	assume cs:code
    start:
    	push ds
    	sub ax,ax
    	push ax
    	mov bx,0ah
    	mov cx, 0ah
    sum1:
    	add ax,bx
    	dec bx
    	loop sum1
    printit:
    	mov bl,10
    	div bl
    	add al,30h
    	mov ch,ah
    	mov dl,al
    	mov ah,2
    	int 21h
    	add ch,30h
    	mov dl,ch
    	mov ah,2
    	int 21h
    	ret
    	main endp
    	code ends
    end
    

    2

    data segment         ;数据段定义开始
        buf db 10 dup(?)      ;数据定义及其存储空间
        max db ?
        min db ?
        Str1 db 0DH,0AH,'Please input: ','$'  	 ;定义Str1的内容
        Str2 db 0DH,0AH,'MAX:','$'      	 ;定义Str2的内容
        Str3 db 0DH,0AH,'MIN:','$'        	 ;定义Str3的内容
    data ends    ;数据段定义结束  
    
    Stack segment stack   ;堆栈段定义开始
        db 10 dup(?)
    stack ends      ;堆栈段定义结束
    
    code segment    ;代码段定义开始
    main proc far     
        assume cs:code,ds:data,ss:stack
    start:    					
        push ds       
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov cx,10
        mov si,0      ;寄存器,用于寻址
        mov bx,0
    lop1:				
        lea dx,Str1  
        mov ah,09
        int 21h
        mov ah,01h    ; 输入
        int 21h
        mov buf[si],al
        inc si
        loop lop1    ;返回循环1
        mov cx,9
        mov si,0
        mov al,buf[si]
        mov bl,al
    lop2:
        inc si   
        mov dl,buf[si]
        cmp dl,al
        jl compare1
        mov al,dl
    compare1:
        cmp bl,dl 		 ;比较,小的数放在bl
        jl compare2
        mov bl,dl
    compare2:
        loop lop2   
        mov max,al   
        mov min,bl 
        lea dx,Str2
        mov ah,09
        int 21h
        mov dl,max
        mov ah,02h                  
        int 21h       	;输出最大数
        lea dx,Str3
        mov ah,09
        int 21h
        mov dl,min
        mov ah,02h                  
        int 21h       	;输出最小数
        ret 
        main endp
        code ends    
    end start
    

    3

    data segment         ;数据段定义开始
        buf db 10 dup(?)      ;数据定义及其存储空间
        max db ?
        min db ?
        Str1 db 0DH,0AH,'Please input: ','$'  	 ;定义Str1的内容
        Str2 db 0DH,0AH,'MAX:','$'      	 ;定义Str2的内容
        Str3 db 0DH,0AH,'MIN:','$'        	 ;定义Str3的内容
        Str4 db 0DH,0AH,'SUM:','$'        	 ;定义Str4的内容
    data ends    ;数据段定义结束  
    
    Stack segment stack   ;堆栈段定义开始
        db 10 dup(?)
    stack ends      ;堆栈段定义结束
    
    code segment    ;代码段定义开始
    main proc far     
        assume cs:code,ds:data,ss:stack
    start:    					
        push ds       
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov cx,10
        mov si,0      ;寄存器,用于寻址
        mov bx,0
    lop1:				
        lea dx,Str1  
        mov ah,09
        int 21h
        mov ah,01h    ; 输入
        int 21h
        mov buf[si],al
        inc si
        loop lop1    ;返回循环1
        mov cx,9
        mov si,0
        mov al,buf[si]
        mov bl,al
    lop2:
        inc si   
        mov dl,buf[si]
        cmp dl,al
        jl compare1
        mov al,dl
    compare1:
        cmp bl,dl 		 ;比较,小的数放在bl
        jl compare2
        mov bl,dl
    compare2:
        loop lop2   
        mov max,al   
        mov min,bl 
        lea dx,Str2
        mov ah,09
        int 21h
        mov dl,max
        mov ah,02h                  
        int 21h       	;输出最大数
        lea dx,Str3
        mov ah,09
        int 21h
        mov dl,min
        mov ah,02h                  
        int 21h       	;输出最小数
        lea dx,Str4
        mov ah,09
        int 21h
        sub ax,ax
        mov bx,0
        mov cx,9
        mov si,0
    sum1:
        inc si   
        mov bl,buf[si]
        sub bl,30h
        add ax,bl
        loop sum1
    printit:
        mov bl,10
        div bl
        add al,30h
        mov ch,ah
        mov dl,al
        mov ah,2
        int 21h
        add ch,30h
        mov dl,ch
        mov ah,2
        int 21h
        ret
        main endp
        code ends    
    end start
    

    4

    data segment         ;数据段定义开始
        buf db 10 dup(?)      ;数据定义及其存储空间
        max db ?
        min db ?
        Str1 db 0DH,0AH,'Please input: ','$'  	 ;定义Str1的内容
        Str2 db 0DH,0AH,'MAX:','$'      	 ;定义Str2的内容
        Str3 db 0DH,0AH,'MIN:','$'        	 ;定义Str3的内容
    data ends    ;数据段定义结束  
    
    Stack segment stack   ;堆栈段定义开始
        db 10 dup(?)
    stack ends      ;堆栈段定义结束
    
    code segment    ;代码段定义开始
    main proc far     
        assume cs:code,ds:data,ss:stack
    start:    					
        push ds       
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov cx,10
        mov si,0      ;寄存器,用于寻址
        mov bx,0
    lop1:				
        lea dx,Str1  
        mov ah,09h
        int 21h
        mov ah,01h ; 输入1
        int 21h
        sub al,30h
        mov ah,0
        mov bl,10
        mul bl
        mov dl,al
        mov ah,01h ; 输入2
        int 21h
        sub al,30h
        mov ah,0
        add al,dl
        mov buf[si],al
        inc si
        loop lop1    ;返回循环1
        mov cx,9
        mov si,0
        mov al,buf[si]
        mov bl,al
    lop2:
        inc si   
        mov dl,buf[si]
        cmp dl,al
        jl compare1
        mov al,dl
    compare1:
        cmp bl,dl 		 ;比较,小的数放在bl
        jl compare2
        mov bl,dl
    compare2:
        loop lop2   
        mov max,al   
        mov min,bl 
    printmax:
        lea dx,Str2
        mov ah,09
        int 21h
        mov ax,0
        mov al,max
        mov bl,10
        div bl
        add al,30h
        mov ch,ah
        mov dl,al
        mov ah,2
        int 21h
        add ch,30h
        mov dl,ch
        mov ah,2
        int 21h
    printmin:
        lea dx,Str3
        mov ah,09
        int 21h
        mov ax,0
        mov al,min
        mov bl,10
        div bl
        add al,30h
        mov ch,ah
        mov dl,al
        mov ah,2
        int 21h
        add ch,30h
        mov dl,ch
        mov ah,2
        int 21h
        ret
        main endp
        code ends    
    end start
    

    结果分析

    1

    2

    3

    4

    参考文章

    https://blog.csdn.net/csj41352/article/details/79981434

    https://zhidao.baidu.com/question/562479802788685844.html

    https://wenku.baidu.com/view/af740cdc19e8b8f67d1cb92f.html

    展开全文
  • 此书是四川大学计算机学院汇编语言程序设计的教材,由九爷主编的书的高清版PDF。本书共11章,系统地介绍了汇编语言程序设计各类基础知识与编程指令、方法;计算机系统模型;分支与循环程序设;子程序设计与系统调用...
  • 汇编语言程序的分割部分等等,值得初学者进行学习和借鉴
  • 课堂实验....80X86汇编编写一个多重循环程序....
  • 汇编语言 8086/80x86
  • 1、有一个字数组a,编程将其复制到b数据区。 data segment a dw 1,2,3,4,5 b dw ?,?,?,?,? data ends stack segment para stack dw 10h dup(0) stack ends code segment assume cs:code,ds:data,ss:stack ... ...
  • 汇编语言程序设计——循环结构例8

    千次阅读 2019-08-02 08:44:54
    汇编语言程序设计——循环结构例8 设计目标 将 Y 字节数组分类为正数(Z1)和负数(Z2)两个数组. 设计思路 (1) 由于数组定义为字节单元,因此数组元素个数 N 可用当前单元地址$ 和 Y 数组的首地址相减得到;...
  • 大作业的要求和内容: ①通过键盘输入学生的考试成绩,成绩采用百分制且为2位整数(其中100分为3位整数,要求验证所输入成绩的合法性),按‘E’或‘e’键表示成绩录入完毕;...要求完成软件代码的设计和报告的撰写。
  • 通过循环结构程序熟悉汇编语言程序设计的主要方法。了解和掌握程序设计过程中算法的选择。掌握汇编语言的调试方法。实验内容从键盘输入一系列字符(每种字符不超过9)并以回车符结束,统计出字母、数字及其它字符的...
  • 本书共分为9章,内容包括:汇编语言基础知识、汇编语言程序实例及上机操作、指令系统及寻址方式、伪指令与源程序格式、分支与循环程序设计、子程序设计、高级汇编语言技术、输入输出和中断、输入输出应用,实验。
  • 1.掌握循环结构程序设计的方法; 2.掌握数据块传送程序设计的方法; 3.掌握串传送指令的应用。 二. 实验内容 1.内容: 1)编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。 2)假设STR1+20&...
  • 实验四_循环结构汇编语言程序设计实验报告.pdf实验四_循环结构汇编语言程序设计实验报告.pdf实验四_循环结构汇编语言程序设计实验报告.pdf实验四_循环结构汇编语言程序设计实验报告.pdf实验四_循环结构汇编语言程序...
  • 实验四_循环结构汇编语言程序设计实验报告.docx实验四_循环结构汇编语言程序设计实验报告.docx实验四_循环结构汇编语言程序设计实验报告.docx实验四_循环结构汇编语言程序设计实验报告.docx实验四_循环结构汇编语言...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,879
精华内容 19,951
关键字:

汇编语言循环程序设计