- 实验目的
1、学习分支和循环程序的设计思想;
2、掌握分支和循环程序的设计方法。
- 实验设备
PC计算机一台
- 实验内容
1、编写程序,统计长度为10的字型内存变量buffer中,正数、负数、0的个数;
2、编写程序,求以‘!’结尾的字节型内存变量Str1中,大写字母的个数;
- 试验程序
1、
DATA SEGMENT
BUF DW 7,98,-98,158,10,133,-45,66,-134,-122,0,-33,0,-99,0
string1 db 'Positive number: ','$'
string2 db 'Negative number: ','$'
string3 db 'zero number: ','$'
crlf db 0dh,0ah,'$'
p db 0
DATA ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
mov cx,15
mov si,0
mov dh,0;正数个数
mov bh,0;0个数
mov bl,0;负数个数
mov si,offset BUF
l1:
mov ax, [si]
cmp ax,0
jge l2;大于等于
add bl,1;负数加一
jmp l4
l2:
cmp ax,0
jg l3
add bh,1;0数加一
jmp l4
l3:
add dh,1;正数加一
mov p,dh
l4:
dec cx
add si,2
cmp cx,0;判断是否结束
jnz l1
jmp over
over:lea dx,string1
mov ah,9
int 21h
mov dh,p
mov dl,dh
add dl,48
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
lea dx,string3
mov ah,9
int 21h
mov dl,bh
add dl,48
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
lea dx,string2
mov ah,9
int 21h
mov dl,bl
add dl,48
mov ah,2
int 21h
MOV AH,4CH
INT 21H
CODE ENDS
END START
2.
DATAS SEGMENT
;此处输入数据段代码
str1 db "Hello World!",13,10,'$'
str2 DB "The number of capital is:",13,10,"$"
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
lea dx,str1
mov ah,9
int 21h
mov si,offset str1
call count
lea dx,str2
mov ah,9
int 21h
mov dl,cl
add dl,48
mov ah,2
int 21h
MOV AH,4CH
INT 21H
count proc
push ax
push bx
push dx
push si
mov cl,0;计数器
L0:
mov al,[si]
add si,1
cmp al,'!'
je over
cmp al,'A'
jb L0
cmp al,'Z'
ja L0
inc cl
jmp L0
over:
pop si
pop dx
pop bx
pop ax
ret
count endp ;出口参数cl
CODES ENDS
END START
- 试验中遇到的问题、试验结果分析
- 编写程序,统计长度为10的字型内存变量buffer中,正数、负数、0的个数;
结果截图:
先将buf中的数据存入ax中然后与0进行比较,大于等于0时跳转到l2,小于0时负数bl加一,跳转到l2之后再与0进行比较,大于0时跳转L3,正数dh加一,等于0时,0数bh加一。输入的数应该在先判断大于等于0的情况后分出负数,然后再与0进行比较分出正数和0。
- 编写程序,求以‘!’结尾的字节型内存变量Str1中,大写字母的个数;
结果截图:
ASCII码在65-90之间为大写字母,依次遍历str1里的数据ASCII满足大于等于65小与等于90给计数器加一,最后输出计数器中的值。
- 实验总结与体会
通过本次实验我对内存的中变量的定义以及内存中数组的遍历有了更深的理解,同时我掌握了分支和循环程序的设计思想和方法,也学会了如何进行字符串的输出,对于汇编语言的使用也更加熟练。