[作业]【汇编】具有多重循环结构和分支结构的汇编程序

问题描述

假设有一个字类型的数值 arry1,试编写程序统计 arry1 数值及其后若干数值,在字单元中存储时每个数据中
含“0”数据位的个数,并将统计结果保存在 res1 数组中。数据段的代码定义如下:
data segment
arry1 dw 223,4037,5635,8226,11542,14430,45257,811
len equ $-arry1
res1 db len/2 dup(0)
data ends
注:可结合 shl(或 shr)指令和条件转移指令来实现对字节数据中“0”的计数。(提示:使用 shl 或 shr 指令,
移出位将写入标志寄存器中的 CF 标志位,而条件转移指令中正好有根据 CF 的值进行操作跳转的指令)

代码展示

; multi-segment executable file template.

data segment
    arry1 dw 223, 4037, 5635, 8226, 11542, 14430, 45257, 811
    len equ $-arry1      ;将数组长度定义为len
    res1 db len/2 dup(0) ;定义了len/2个字节,且全为0
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:   
       mov ax, data              ;初始化变量 
       mov ds, ax
       mov cx, 8                 ;定义外层循环为8
                                                                                          
 lop1: mov bl, 16                ;定义内层循环16,遍历16个字节保存的8个数据
        
 lop2: shl ds:arry1[di],1        ;每次向左移动1位      
       jc  s                     ;如果每次cf = 1,跳转到s      
       add ds:res1[si], 1        ;给res1[di]1 
                                                 
     s: dec  bl                  ;当bl == 0时,跳出内层循环                
     jnz lop2
            
     add si, 1                   ;res1向后移动1位
    
     add di, 2                   ;arry1向后移动2位
                            
     loop lop1 
                      
    mov ax, 4c00h                ;结束返回程序       
    int 21h    
ends

end start   
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值