`
Touch_2011
  • 浏览: 290506 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

几道简单的汇编程序

阅读更多
;搜索数组,看是否存在CONST
DATA SEGMENT
	ARRAYB DB 2,3,1,8,7FH,-5
	COUNT EQU $-ARRAYB ;数组长度
	CONST EQU 7FH        ;判断数组中是否存在此元素
	ADDRES DD 0        ;若存在,存放元素的地址
	SCANTIME DW 0      ;若存在,存放搜索次数
DATA ENDS

STACK SEGMENT
	DW 100H DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME SS:STACK,DS:DATA,CS:CODE
	MAIN:
	MOV AX,DATA
	MOV DS,AX
	MOV ES,AX ;目的串的段基址总是存放在ES
	LEA DI,ARRAYB;目的串的偏移首地址存在DI/EDI
	MOV CX,COUNT;设置循环次数
	MOV AL,CONST;数组元素与AL的内容比较
	CLD         ;设置DF标志位
	OR CX,CX    ;设置ZF=0
	REPNE SCASB ;若果不相等,则继续搜索
	JZ SCANED   ;ZF==1表示找到相等的元素
	JMP  @F     ;没找到相等的元素
SCANED:DEC DI
    MOV WORD PTR ADDRES,DI
    MOV WORD PTR ADDRES+2,ES;把元素地址存入ADDRES
    MOV BX,OFFSET ARRAYB
    INC DI
    SUB DI,BX
    MOV SCANTIME,DI;计算搜索次数
    MOV DX,SCANTIME
    ADD DX,30H
    MOV AH,2
    INT 21H
    
@@: MOV AH,4CH
    INT 21H
CODE ENDS
    END MAIN

 

 

 

 

;将ES段中名为BLOCK的字存储区清零.
DATA SEGMENT
	BLOCK DW 5 DUP(1)
DATA ENDS

STACK SEGMENT
	DB 100H DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN:
    MOV AX,DATA
    MOV DS,AX
	MOV AX,SEG BLOCK
	MOV ES,AX
	MOV DI,0
	MOV CX,LENGTH BLOCK	
GOON:
     MOV BLOCK[DI],0  
     ADD DI,TYPE BLOCK   
     LOOP GOON 
     MOV AX,4C00H
     INT 21H
CODE ENDS
     END MAIN


	





 

 

 

;求Z=|X-Y|.其中X,Y均为无符号数
DATA SEGMENT 
	X DW 5
	Y DW 9
DATA ENDS

STACK SEGMENT
	DB 100 DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME SS:STACK,DS:DATA,CS:CODE
MAIN:
   MOV AX,DATA
   MOV DS,AX
   MOV AX,X
   SUB AX,Y
   JC NEXT
   JMP DONE
NEXT:NEG AX
DONE:MOV DX,AX
     ADD DX,30H
     MOV AH,2
     INT 21H
     MOV AH,4CH
     INT 21H     
CODE ENDS
END MAIN

 

 

 

;求X与Y之和并送Z
DATA SEGMENT
;X DW 0E98AH,80AFH,0FD32H,0F68FH
;Y DW 9FD0H,70BAH,3D84H,89FEH
X DW 3 ;为了显示结果,把变量值改为3和5
Y DW 5
Z DW 5 DUP(?)
DATA ENDS

STACK SEGMENT PARA STACK 'STACK'
	DB 100H DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN:
    MOV AX,DATA
    MOV DS,AX
    SUB DI,DI
    MOV CX,1
    CLC
GOON:MOV AX,X[DI]
     ADC AX,Y[DI]
     MOV Z[DI],AX
     ADD DI,2
     LOOP GOON
     RCL AX,1
     AND AX,1
     MOV Z[DI],AX
     ;显示结果
     MOV DL,BYTE PTR Z
     ADD DL,30H
     MOV AH,2
     INT 21H    
     MOV AH,4CH
     INT 21H
CODE ENDS
     END MAIN

 

 

;输入字符串,然后显示输入的字符串
DATA SEGMENT
	BUF DB 50
	    DB ?
	    DB 50 DUP('$');总长度为52
	CR EQU 0DH
	LF EQU 0AH
	MESG1 DB 'PLEASE INPUT A STRING:',CR,LF,'$'
DATA ENDS

STACK SEGMENT
	DW 100H DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME SS:STACK,DS:DATA,CS:CODE
MAIN:
    MOV AX,DATA
    MOV DS,AX
    MOV DX,OFFSET MESG1
    MOV AH,9
    INT 21H;提示输入
    LEA DX,BUF
    MOV AH,10
    INT 21H ;等待输入
    
    MOV DL,LF
    MOV AH,2
    INT 21H;输出换行
    
    LEA DX,BUF+2
    MOV AH,9
    INT 21H;输出字符串
    MOV AH,4CH
    INT 21H
CODE ENDS
     END MAIN

 

 

 

;删除输入字符串中的'A'字符,然后输出删除后的字符串。
;若字符串中不存在'A',则输出'NOT FOUND'
DATA SEGMENT
	BUF DB 50,?,50 DUP('$')
	MESSAGE DB 'NOT FOUND',0AH,'$'
	FLAG DB 0
DATA ENDS
   
STACK SEGMENT
	DW 100H DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME SS:STACK,DS:DATA,CS:CODE
MAIN:
    MOV AX,DATA
    MOV DS,AX
    MOV DX,OFFSET BUF
    MOV AH,10
    INT 21H;读入字符串
    
    MOV DL,0AH
    MOV AH,2
    INT 21H;输出换行符
    
    MOV AX,DATA
    MOV ES,AX;段地址存入ES
    LEA DI,BUF;偏移首地址
    MOV AL,'A';与'A'比较
    MOV CX,WORD PTR BUF[1];循环次数
    CLD;设置DF标志位0
GOON:    
    OR CX,CX;设置ZF=0 
    CMP [BUF+DI],AL
    JNZ NEXT;如果不同,进入下一次循环
    MOV [BUF+DI],'0'
    INC FLAG[0]
NEXT:INC DI  
    LOOP GOON
    
    OR CX,1
    CMP FLAG[0],1
    JNZ MES
    
    LEA DX,MESSAGE
    MOV AH,9
    INT 21H;没找到时输出NOT FOUND
    JMP DONE
    
MES:MOV CL,[BUF+1]
    MOV DI,OFFSET BUF+2
SIGN:OR CX,CX
    CLD
    MOV DL,[BUF+DI]
    CMP DL,'0';是0的话不输出
    JZ NO;
    MOV AH,2
    INT 21H
NO: INC DI
    LOOP SIGN;输出字符串           
    
DONE:MOV AH,4CH
    INT 21H
  
CODE ENDS
     END MAIN

  

 

 

 

;对395872843948这些0--9的数字进行冒泡排序

DATA SEGMENT
	ARRAY DB '395872843948',0DH,0AH,'$'
DATA ENDS

STACK SEGMENT
	DB 100H DUP(?)
STACK ENDS

CODE SEGMENT
	ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN:
    MOV AX,DATA
    MOV ES,AX
    MOV DS,AX
    MOV CX,12;要比较的次数
    MOV BX,12;每次要比较的个数
INIT:
    MOV DI,0 ;偏移首地址
    MOV BX,CX          
GOON:
    MOV AL,ARRAY[DI]
    CMP AL,ARRAY[DI+1]
    JG NEXT
    XCHG AL,ARRAY[DI+1]
    MOV ARRAY[DI],AL;交换
NEXT:INC DI
     DEC BX
     JNZ GOON;不相等
     LOOP INIT;完成一趟排序
    
     MOV DX,OFFSET ARRAY
     MOV AH,9
     INT 21H;输出排好序的序列
  
     MOV AH,4CH
     INT 21H
CODE ENDS
     END MAIN

 

0
0
分享到:
评论

相关推荐

    51单片机驱动ADC0808电路图C51及汇编程序

    《51单片机驱动ADC0808电路图C51及汇编程序》 本文涉及的知识点主要集中在51单片机、ADC0808模拟数字转换器、C51编程以及汇编语言在单片机控制系统中的应用。51单片机是一种广泛应用的微控制器,因其结构简单、资源...

    汇编语言按钮人行道控制

    在微机原理与汇编语言课程设计中,我们经常会遇到实际应用案例,比如"汇编语言按钮人行道控制"项目。这个项目的目标是通过编程模拟一个基于按钮控制的人行道交通系统,它能帮助我们深入理解底层计算机硬件与软件交互...

    80x86汇编语言程序设计教程

    理解这些指令的用法是编写汇编程序的基础。 在汇编语言编程中,还会涉及到寻址模式,如直接寻址、间接寻址、相对寻址等,这些寻址模式决定了数据或指令的来源和目标。此外,流程控制指令,如JMP、CALL、RET等,用于...

    数模与模数转换的汇编程序

    在这个具体的例子中,我们可以看到程序使用了Intel x86架构下的汇编语言来实现数模与模数转换的过程。 #### 程序结构分析 1. **数据段**(Data Segment, `dseg`): - 存储了常量和变量。 - 包括提示消息、错误...

    PIC单片机AD转换汇编程序.pdf

    标题中的“PIC单片机AD转换汇编程序”指的是使用汇编语言编写的程序,用于在PIC单片机上实现模拟数字(A/D)转换功能。这个程序利用中断方式来处理AD转换,即将ADC(模数转换器)的转换过程在特定事件(如外部中断)...

    ADC0808 汇编 PROTUES 仿真

    最后,"ADC0808的数字电压表"可能是实际应用的一个实例,展示了如何使用ADC0808和汇编语言构建一个简单的数字电压表。这种应用可能包括对输入电压的实时采样、转换以及结果显示在微控制器的LCD或七段显示器上。 ...

    【最新】单片机读写U盘汇编程序-pb375

    PB375 U盘读写汇编程序 性价比超高的U盘读写模块-PB375,兼容CH375读写操作 1. 功能 ● 用于嵌入式系统/单片机读写U 盘、闪盘、闪存盘、USB 移动硬盘、USB 读卡器等。 ● 支持符合USB 相关规范基于Bulk-Only 传输...

    汇编简单的音响实现.docx

    然后,使用汇编语言编写程序,通过设置定时器中断来生成特定频率的方波。定时器的周期设置为所需音符的频率的倒数,每次中断时改变输出电平,从而产生声音。 3. 部分代码结构释义:代码可能包括初始化定时器、设置...

    通用微机发声程序的汇编设计

    以设计一个简单的乐曲评分程序为例,我们可以分析其程序设计细节。这个程序可能包含以下部分:乐谱解析,将乐谱数据转化为计算机能理解的格式;节拍管理,控制音乐的节奏;音符生成,根据解析出的数据生成对应的音频...

    2016年高考数学试题分类汇编程序框图文.doc

    1. 第一道题(北京高考)展示了一个简单的程序框图,通过判断条件输出s的值。根据流程,可以理解为一个累加过程,最终输出的s值为9,选择答案B。 2. 第二道题(江苏高考)同样考察了对程序框图的理解,输出的a值...

    IBM-PC汇编语言程序设计课后答案

    汇编语言是一种低级编程语言,每条指令都对应于计算机的机器码,因此理解和编写汇编程序需要对计算机的架构有深入了解。在IBM-PC架构中,最常用的是Intel x86系列处理器的汇编语言,这种语言包含了各种数据操作、...

    单片机交通灯实验汇编语言程序

    一个简单的交通灯系统会有一个主灯,控制主干道的交通,和一个次灯,控制次要道路的交通。主灯和次灯会按照一定的时间间隔交替变换,保证交通的有序进行。 知识点四:汇编语言程序实例分析 该程序通过一系列指令...

    打字游戏设计 汇编语言

    打分系统通常涉及到数据结构和算法的设计,可能用汇编语言实现一个简单的计分变量,并根据玩家的打字速度和准确性进行更新。分数的显示则需要结合屏幕输出指令来完成。 至于音乐播放,"打字游戏+music程序"表明游戏...

    DOS下控制PC POWER LED灯的汇编小程序

    本篇文章将深入探讨如何在DOS下通过汇编程序控制PC的电源LED(Power LED)灯。 首先,我们要理解LED(Light Emitting Diode)是一种电子元件,当电流通过时会发光。在个人计算机上,电源LED通常用来指示电脑是否...

    汇编语言 沈明美 清华大学教材 课后答案

    3. **程序设计**:习题涉及如何编写简单的汇编程序,如子程序设计、循环结构、条件判断等,这有助于提高程序设计的逻辑思维能力。 4. **实际应用**:习题中可能会涉及到内存管理、中断处理、I/O操作等实际问题,...

    微机原理与汇编语言程序设计课后习题参考答案[定义].pdf

    微机原理与汇编语言程序设计课后习题参考答案 微机原理是计算机系统的核心部分,涉及微处理器、微型计算机、微型计算机系统等概念。微处理器是微型计算机的核心组成部分,包括运算器、控制器、寄存器阵列和内部总线...

    汇编自测题

    "几道简单的汇编测试题"可能涵盖了以下几个方面的内容: 1. **指令系统**: 测试题可能包括对不同类型的汇编指令的理解,如数据传送指令(如MOV)、算术运算指令(如ADD、SUB、MUL、DIV)、逻辑运算指令(如AND、OR...

Global site tag (gtag.js) - Google Analytics