上机实验07 循环程序设计

四、实验内容与步骤

1、实验内容

(1)单步运行调试上面程序sy07_1.ASM,  给程序的语句加上注释;

(2)编写程序,计算数组ARRAY中各数的和(参看书上P364例10-1)。程序保存为sy07_2.ASM;

(3)编写程序,统计字符串STRING中大写字母的个数(参看书上P366例10-2)。程序保存为sy07_3.ASM;

sy07_1.ASM

stack segment para  stack
   dw  20H dup(0)
stack ends
data segment
   vary  db 23h,78h,56h,0abh,00h,0cdh,59h,14h,98h,0efh,00h,0c0h
cnt equ $-vary
vm  db ?
vn  db ?
vk db ?
data ends
code segment
   assume cs:code,ds:data,ss:stack
start: 
	mov ax,data
	mov ds,ax
	mov bx,0	;初始化
	mov dl,0	;清零
	lea si,vary	;初始化地址指针
	mov cx,cnt	;设置循环次数
	;循环体
lop1:
	cmp byte ptr[si],0	;和0比较
	je zero	;等于0转ZERO
	js lop2	;为负数转LOP2
	inc bh	;统计正数个数的寄存器增1
	jmp  next
lop2:
	inc bl	;统计负数的寄存器增1
	jmp next
    zero:
           inc dl	;统计0个数的寄存器增1
    next:
           inc si	;修改地址指针
	loop lop1	;判断终止条件,CX!=0则循环
	;结束处理部分
	mov vm,bh	;保存正数的个数
	mov vn,bl	;保存负数的个数
	mov vk,dl	;保存0的个数
	mov ah,4ch
	int 21h	;返回DOS
code ends
	end start

sy07_2.ASM

DATA	SEGMENT
ARRAY	DB	1,2,3,4,5,6,7,8,9,10
COUNT	EQU	$-ARRAY
SUM	DW	?
DATA	ENDS
STACK1	SEGMENT	PARA	STACK
	DW	20H	DUP(0)
STACK1	ENDS
CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA
START:
	MOV	AX,DATA
	MOV	DS,AX
	XOR	AX,AX	;AX寄存器清0,累加用
	MOV	CX,0	;计数器CX清0
	MOV	SI,0	;数组指针清0
NEXT:
	ADD	AL,ARRAY[SI]	;数组累加
	INC	SI	;数组指针后移
	INC	CX	;计数器加1
	CMP	CX,COUNT	;计数器值与循环次数比较
	JL	NEXT	;如果小于,继续循环
	MOV	BYTE	PTR	SUM,AL	;将累计和存入变量
	MOV	AH,4CH
	INT	21H
CODE	ENDS
	END	START

sy07_3.ASM

DATA	SEGMENT
STRING	DB	'The CPU is the brains of the computer'
COUNT	EQU	$-STRING
SUM	DW	?
DATA	ENDS
STACK1	SEGMENT	PARA	STACK
	DW	20H	DUP(0)
STACK1	ENDS
CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA
START:
	MOV	AX,DATA
	MOV	DS,AX
	XOR	AX,AX
	MOV	CX,COUNT	;将循环次数数存入CX
	MOV	SI,0	;字符串指针清0
AGAIN:
	MOV	BL,STRING[SI]	;取字符串中的字符
	CMP	BL,'A'	;比较字符与A的ASCII码
	JB	NEXT	;如果小于,跳转
	CMP	BL,'Z'	;比较字符与Z的ASCII码
	JA	NEXT	;如果大于,跳转
	INC	AX	;是大写字母,个数加1
NEXT:
	INC	SI	;指向下一个字符
	LOOP	AGAIN	;如果小于循环次数,继续循环
	MOV	SUM,AX
	MOV	AH,4CH
	INT	21H
CODE	ENDS
	END	START

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值