zoukankan      html  css  js  c++  java
  • 汇编三(习题)

     1:内存分布图

      注意:  必须弄懂这个图,这能良好处理指令序列

     常用归零代码:

    1:MOV AX,0
    2:SUB AX,AX
    3:XOR AX,AX
    4:AND AX,00H

    1假设寄存器AX保存的是一个有符号数,编写一个程序实现加下功:

    DATAS SEGMENT
        X DW  02H;
    DATAS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS
    START:
        MOV AX,DATAS
        MOV DS,AX
        XOR AX,AX
        MOV AX,X
        CMP AX,0
        JGE next
        MOV AX,-1
        JMP next2
        next:
        MOV AX,1
        next2:
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START

    2: 编制一完整的程序,统计有符号字数组ARRARW中大于5,小于5和等于5的数据个数,并将其分别存储到字变量MAX5,MIN5和EQU5中去

    注意: INC DEC 指令不能直接操作 数据段中的操作数

    正确的程序:

    DATAS SEGMENT
        ARRARW DW '1','2','5','6','8'
        MAX5 DW ?;
        MIN5 DW ?;
        EQU5 DW ?;
        len DW $-ARRARW;
    DATAS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS
    START:
        MOV AX,DATAS
        MOV DS,AX
          XOR AX,AX ;存储MIN5
          XOR BX,BX ;存储MAX5
          XOR DX,DX ;存储EQU5
          MOV CX,5;
          MOV SI,0
          next:
            CMP ARRARW[SI],'5'
            JGE large5
            INC AX   ; 小于5
            JMP next2
            large5:
            CMP ARRARW[SI],'5'
            JE equ5s
            INC DX    ;大于5
            JMP next2
            equ5s:
            INC BX    ;等于5
          next2:
          INC SI
          CMP SI,len
          JGE next3
          LOOP next
          next3:
          ADD AX,30H ; DW进行对齐
          ADD BX,30H ;
          ADD DX,30H ;
          MOV MIN5,AX;1
          MOV MAX5,DX;2
          MOV EQU5,BX;2
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START

    原来错误的程序:

    为什么显示不出来 因为DW中的是自变量需要手动加30H, 改正后正常显示正常

    DATAS SEGMENT
        ARRARW DW '1','2','5','6','8'
        MAX5 DW ?;
        MIN5 DW ?;
        EQU5 DW ?;
        len DW $-ARRARW;
    DATAS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS
    START:
        MOV AX,DATAS
        MOV DS,AX
          XOR AX,AX ;存储MIN5
          XOR BX,BX ;存储MAX5
          XOR DX,DX ;存储EQU5
          MOV CX,5;
          MOV SI,0
          next:
            CMP ARRARW[SI],'5'
            JGE large5
            INC AX   ; 小于5
            JMP next2
            large5:
            CMP ARRARW[SI],'5'
            JE equ5s
            INC DX    ;大于5
            JMP next2
            equ5s:
            INC BX    ;等于5
          next2:
          INC SI
          CMP SI,len
          JGE next3
          LOOP next
          next3:
          MOV WORD PTR MIN5,AX;这里看不到值 有疑问
          MOV WORD PTR MAX5,DX
          MOV WORD PTR EQU5,BX
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START

    3: 编制求BX寄存器中的信息含有多少个二进制位"1"的程序

    正确程序:

    DATAS SEGMENT
        X DB '123411'
        len EQU $-X
    DATAS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS
    START:
        MOV AX,DATAS
        MOV DS,AX
        MOV AX,0H 
        MOV BX,0H
        MOV CX,6;
        next:
        CMP X[BX],31H 
        JNE next2
         INC AX ; 表示1的个数
         JMP next2
        next2:
         INC BX
        loop next
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START

     错误程序如下(自己写的有不想删除,当做教训):

    DATAS SEGMENT
        X DB 1,2,3,4,1,1
        len EQU $-X
    DATAS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS
    START:
        MOV AX,DATAS
        MOV DS,AX
          XOR AX,AX
          XOR BX,BX
          LEA BX,X
          MOV CX,len
          next:SHL BL,1
          JNC next2
           INC AL
           next2: 
          loop next
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
  • 相关阅读:
    Spring加载机制
    SpringMVC 请求过程
    Spring事务传播机制
    数组扩容
    hashmap 底层原和扩容机制
    spring源码
    金字塔表达方式(三)如何使得一个事情变得清晰有逻辑
    金字塔表达方式(二)如何判断事情的逻辑是否正确
    C#设计模式(3)——单例模式(Singleton)
    C#设计模式(2)——工厂模式
  • 原文地址:https://www.cnblogs.com/dgwblog/p/11821867.html
Copyright © 2011-2022 走看看