汇编语言 —— 程序设计

汇编语言 —— 程序设计

考试出题会在以下中选二。

在这里插入图片描述

Data Segment
	Pcount dw 0
	Ncount dw 0
	Zcount dw 0
	array dw 7,-1,2,0,-2,5,6,0
Data ends
Code Segment
	Assume DS:Data,cs:Code
	Start: mov ax,Data
		   mov ds,ax
		   xor ax,ax
		   xor bx,bx
		   xor dx,dx
		   mov cx,array 
		   jcxz save
		   lea si,array+2
		   
	again: cmp word ptr [si],0
		   jl lower
		   je equal
		   inc ax
		   jmp loop1
		 
	lower: inc bx
		   jmp loop1
		   
	equal: inc dx
	
	loop1: add si,2
		   loop again
		   
	save : mov Pcount,ax
		   mov Ncount,bx
		   mov Zcount,dx
		   
		   mov ax,4c00h
		   int 21H
Code ends
end Start
		   

在这里插入图片描述
Test方法:

Data Segment
	BUF dw 1234H
	count db ?
Data ends

Code Segment
	Assume DS:Data,CS:Code
	Start: mov ax,Data
		   mov ds,ax
		   mov bx,BUF
		   mov cx,16 ;循环次数
		   xor dl,dl ;记录1的个数
		   mov ax,0001H
	
	again: Test bx,ax
		   jz next ;0跳转
		   inc dl  ;不为01
		   
	next : Shl ax,1
		   loop again
		   mov count,dl
		   mov ax,4c00h
		   int 21H
Code ends
end Start

循环移位法:

Data Segment
	BUF dw 1234H
	count db ?
Data ends

Code Segment
	Assume DS:Data,CS:Code
	Start: mov ax,Data
		   mov ds,ax
		   mov bx,BUF
		   mov cx,16 ;循环次数
		   xor dl,dl ;记录1的个数
	
	again: Rol bx,1
		   jnc next ;cf不为1就跳
		   inc dl  ;cf为1就加一
		   
	next : loop again
		   mov count,dl
		   mov ax,4c00h
		   int 21H
Code ends
end Start

在这里插入图片描述

Data Segment
	Array db 1,2,34,4,-5,2,-7
	Count equ $ - Array
	Max db ?
	Min db ?
Data ends

Code Segment
	Assume DS:Data,CS:Code
	Start: mov ax,Data
		   mov ds,ax
		   
		   lea bx,Array
		   mov al,[bx] ; 将第一个元素作为最大值的初始值
		   mov dl,al ; 同样也作为最小值的初始值
		   mov cx,Count - 1
	again: inc bx
		   mov ah,[bx]
		   cmp al,ah
		   JGE Next ;大于等于就跳
		   mov al,ah ;若小于就替换,确保al中是最大的
	
	Next : cmp dl,ah
		   JLE Over ; 小于等于就跳
		   mov dl,ah ; 若大于就替换,确保dl中最小
		   
	Over : Loop again
		   mov Max,al
		   mov Min,dl
		   
		   mov ax,4c00h
		   int 21H

Code ends
end Start

在这里插入图片描述

Data Segment 
	string db 'This is a string!$'
	result dw ?
Data ends

Code Segment
	Assume DS:Data,CS:Code
	Start: mov ax,Data
		   mov ds,ax
		   
		   lea bx,string
		   xor cx,cx
	again: mov al,[bx]
		   cmp al,'$'
		   JZ Exit
		   cmp al,20H
		   JNZ next ; 若不等于空格就跳
		   inc cx ; 等于就加一
	next : inc bx
		   Jmp again
		  
	Exit : mov result,cx
	
		   mov ax,4c00h
		   int 21h
Code ends
end Start

5.统计字符串长度
法一:

Data Segment	
	Str1 db 'DATASTRING'
	Num EQU $-Str1
Data ends

法二:

Data Segment	
	BUF db 10,?,10 dup('$')
	str1 db "Please input a string:(length<9):$"
	str2 db 0ah,0dh,"The length of the string is $"
Data ends

Code Segment
	Assume DS:Data , CS:Code
	Start : mov ax,data
		    mov ds,ax
			
			lea dx,str1;输出提示语句
			mov ah,09h
			int 21h		
			
			lea dx,BUF;输入字符串
			mov ah,0ah
			int 21h
			
			mov cl,[BUF+1];获取长度
			add cl,30h
			
			lea dx,str2;输出长度
			mov ah,09h
			int 21h
			
			mov dl,cl
			mov ah,02h
			int 21h
						
			mov ax,4c00h
			int 21h
			
Code ends
end Start
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值