汇编练手题集二

转载 2006年05月22日 16:27:00

7.将al中的第7位和第0位交换,第6位和第1位交换,第5位和第2位交换,第4位和第3位交换。
提示:其实就是将al中的各比特位逆序排列。

完整程序如下:

data segment
        array db 8 dup(0)
data ends

code segment
        assume cs:code,ds:data
main:
        mov ax,data
        mov ds,ax
       
        lea si,array
        mov bl,10000000B        ;初始测试位
        mov al,10110101B        ;设置al的值[可自己设置]

        mov cx,8
s1:     test al,bl
        jz next
        inc byte ptr [si]    ;相应位如果不为0,则置1
next:   shr bl,1
        inc si
        loop s1
          ;第一个循环体为得到逆序的[自左至右]al中各比特位的值

        lea si,array+1        ;第0位不用移位操作
        shl byte ptr [si],1    ;第1位左移1位
        inc si
        mov bl,2
        mov cx,6
s2:     push cx
        mov cl,bl
        shl byte ptr [si],cl
        inc si
        inc bl
        pop cx
        loop s2
          ;第二个循环体为第x位则左移x位,以实现逆序排列
       
        lea si,array
        mov al,0
        mov cx,8
s3:     or al,[si]    ;循环'或'操作,实现单字节数据的位逆序排列
        inc si
        loop s3

        mov ah,4ch
        int 21h

code ends
end main

 

============================================
8.已知内存source_dat单元开始连续存放若干个字型单元数据,数据个数在counts单元中存放.编制程序求这些数据中出现次数最多的数据,将出现次数及数据分别存入mostTimes_data+2和mostTimes_data单元.

完整程序如下:

data segment
        mostTimes_data dw ?  ;存放出现次数最多的数据
                       db ?  ;存放该数据出现的次数
        source_dat dw 5,2,1,5,2,10,2
        counts db ($-source_dat)/2 dup (?,?,0)
                ;分配"($-source_dat)/2"个3个字节的内存单元
                     ;每个数据的第3个内存单元存放其出现次数
data ends

code segment
        assume cs:code,ds:data
main:
        mov ax,data
        mov ds,ax

        lea si,source_dat
        lea bx,counts
        lea di,counts
       
        mov ax,[si]
        mov [di],ax
        inc byte ptr [di+2]
        add di,3
          ;以上四句将第一个数据及其出现次数存放在目的内存区
        add si,2 ;从第2个数据开始比较
       
        mov cx,offset counts-offset source_dat
        shr cx,1  ;因为一个数据占2个字节,所以除以2
        dec cx ;减1的目的是因为从第2个数据开始比较
        push cx  ;将cx进栈
        jcxz finish   ;如果只有1个数据则直接跳至标号finish处
       
s2:     push cx
        mov cx,di
        sub cx,bx
        mov al,cl
        mov cl,3
        div cl ;因为一个数据占3个字节[包括其出现次数],所以除以3
        mov cl,al
        s1: ;将从源内存区取出的数据与目的内存区中存在的数据进行逐个比较
                mov ax,[si]
                cmp ax,[bx]
                je equal ;等于则在将已知数据出现的次数加1
                add bx,3
        loop s1
        mov [di],ax
        inc byte ptr [di+2]
        add di,3
        jmp short nextdata
         ;以上四句是将一个数据存放在目的内存区中的一个新的位置中
equal:  inc byte ptr [bx+2]

nextdata:
        lea bx,counts
        add si,2
        pop cx
loop s2

finish: lea di,mostTimes_data
        lea si,counts

        mov ax,[si]
        mov [di],ax
        mov al,[si+2]
        mov [di+2],al
          ;以上四句为存放第一个数据及其出现次数[占3字节]
          ;至目的内存区[此位置存放出现次数最多的数据及其次数]
        add si,3

        pop cx  ;取出一开始进栈的值并存入cx中,以确实比较次数
lp:     mov al,[si+2]
        cmp al,[di+2]
        jle next      ;小于或等于则直接用下一个数据出现的次数进行比较
        mov [di+2],al
        mov ax,[si]   ;大于则将此时取出的数据取代存放在mostTimes_data的数据,
        mov [di],ax     ;以及取代相应出现的次数
next:   add si,3
        loop lp
       
quit:   mov ah,4ch
        int 21h

code ends
end main

(练手备忘)汇编实现将输入的字符串中的空格去掉后反序输出

功能:任意输入一个字符串,去掉其中的空格后反序输出 编译器使用的是MASMPlus ;#Mode = DOS MAXLEN = 64 ;设置字符串的最大长度 SPACE = ' ' ...

java练手题二之类基本

每个类可以分为两个部分:一个是属性与状态,一个是类的行为;专业点讲就是:域和各种方法(要把构造方法区别对待)     1. 域:             实例变量:用来存储某个类对象的状态值。其修...

Python 练手程序合集(二)

三、猴子吃桃猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又吃了一个。以后每天都吃前一天剩下的一半再加一个。到第10天刚好剩一个。问猴子第一...
  • tan6600
  • tan6600
  • 2016年01月29日 12:29
  • 2010

hihoCoder 1089 : 最短路径·二:Floyd算法(水题,练手)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋!鬼屋中一共有N个地点,分别编号为1..N,这N个地点之...

计算机C语言二级练手100题

  • 2015年04月08日 16:09
  • 30KB
  • 下载

Python学习路径及练手项目合集

 转载:https://zhuanlan.zhihu.com/p/23561159 Python学习路径及练手项目合集 本系列Python技术路径中包含入门知识、Python...

java练手题

  • 2015年03月15日 20:09
  • 21KB
  • 下载

java练手题

  • 2012年08月21日 12:53
  • 21KB
  • 下载

java练手题之五异常

1.常见的错误       编译错误:程序编写时,键入错误的关键字或标识符、遗漏标点符号、赋值时数据类型不匹配等错误。      运行错误:java程序执行时因非法操作或操作失败等原因产生的错误。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编练手题集二
举报原因:
原因补充:

(最多只允许输入30个字)