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
  • 相关阅读:
    leetcode Remove Linked List Elements
    leetcode Word Pattern
    leetcode Isomorphic Strings
    leetcode Valid Parentheses
    leetcode Remove Nth Node From End of List
    leetcode Contains Duplicate II
    leetcode Rectangle Area
    leetcode Length of Last Word
    leetcode Valid Sudoku
    leetcode Reverse Bits
  • 原文地址:https://www.cnblogs.com/dgwblog/p/11821867.html
Copyright © 2011-2022 走看看