几道简单的汇编程序

;搜索数组,看是否存在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值