微机原理与汇编语言实验报告:分支循环

  • 实验目的

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

  • 试验中遇到的问题、试验结果分析
  1. 编写程序,统计长度为10的字型内存变量buffer中,正数、负数、0的个数;

结果截图:

先将buf中的数据存入ax中然后与0进行比较,大于等于0时跳转到l2,小于0时负数bl加一,跳转到l2之后再与0进行比较,大于0时跳转L3,正数dh加一,等于0时,0数bh加一。输入的数应该在先判断大于等于0的情况后分出负数,然后再与0进行比较分出正数和0。

  1. 编写程序,求以‘!’结尾的字节型内存变量Str1中,大写字母的个数;

结果截图:

ASCII码在65-90之间为大写字母,依次遍历str1里的数据ASCII满足大于等于65小与等于90给计数器加一,最后输出计数器中的值。

  • 实验总结与体会

通过本次实验我对内存的中变量的定义以及内存中数组的遍历有了更深的理解,同时我掌握了分支和循环程序的设计思想和方法,也学会了如何进行字符串的输出,对于汇编语言的使用也更加熟练。

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值