美文网首页
汇编记录

汇编记录

作者: KN郑某某 | 来源:发表于2021-02-23 09:11 被阅读0次

    汇编基础习题

    题1

    编写一个程序,计算\frac{X*Y-Z}{X}的值。其中X、Y、Z均为16位带符号数,要求表达式的计算结果存放在数据段的RESULT单元中。

    DATA SEGMENT
     X DW 2H
     Y DW 44H
     Z DW 8H
     RESULT DW ?
    DATA ENDS
    
    CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
    START:
      MOV AX,DATA
      MOV DS,AX
      MOV AX,X
      MOV BX,Y
      IMUL BX           ;有符号乘
      SBB AX,Z          ;借位减
      IDIV X            ;有符号除
      MOV RESULT,AX
      JMP $
      CODE ENDS
    END START
    

    题2

    设某班学生(10名)某门课程的成绩存放在内存中,试编程统计90分以上、80-89分、70-79分、60-69分、低于60分的学生人数,并分别存放到A、B、C、D、E单元中。

    DATA  SEGMENT
      TAB DB 60,70,80,90,77,88,76,69,74,58          ;10个学生成绩
      A DB 0H
      B DB 0H
      C DB 0H
      D DB 0H
      E DB 0H
    DATA ENDS
    
    CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
    START:
      MOV AX,DATA
      MOV DS,AX
      MOV BX,OFFSET TAB   ;初始化指针
      MOV CX,10           ;设置计数器初值
      SELECT:
       MOV AL,[BX]
       CMP AL,90                ;大于等于90
       JGE G1
       CMP AL,80                ;大于等于80
       JGE G2
       CMP AL,70                ;大于等于70
       JGE G3
       CMP AL,60                ;大于等于60
       JGE G4
       JMP G5                   ;其他
    G1:
       INC A
       JMP ENDLOOP
    G2:
       INC B
       JMP ENDLOOP
    G3:
       INC C
       JMP ENDLOOP
    G4:
       INC D
       JMP ENDLOOP
    G5:
       INC E
       JMP ENDLOOP
      ENDLOOP:
        INC BX           ;指针移动 + 1
      LOOP  SELECT
      JMP $
     CODE ENDS
    END START
    

    题3

    用主程序、子程序结构实现判断textdata(10个单元)中的数据是否为“0”~“F”的ASCII码。若是,用十六进制数覆盖原单元,否则用0FFH覆盖原单元。

    DATA SEGMENT
     TEXTDATA DB 03h,30h,35h,41h,46h,57h,78h,91h,01h,02h          ;10个参数
     RUSTDATA DB 10 DUP(?)
     DO DB ?
     NUM DB ?
    DATA ENDS
    
    CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
      START PROC
      MOV AX,DATA
      MOV DS,AX
      MOV BX,OFFSET TEXTDATA  ;初始化指针
      MOV SI,OFFSET RUSTDATA
      MOV CX,10           ;设置计数器初值
      SELECT:
       MOV AL,[BX]
       CALL CHECK
       MOV [BX],AL
       MOV [SI],AL
       INC BX           ;指针移动 + 1
       INC SI           ;指针移动 + 1      
      LOOP  SELECT
      JMP $
      START ENDP
    
      ;子程序
      CHECK PROC
     CMP AL,'0'
     JGE CEK      ;判断AL >= '0'
     JMP WRONG
    CEK:
      CMP AL,'F'
      JLE RIGHT   ;判断AL <= 'F'
      JMP WRONG
    RIGHT: 
        RET
    WRONG:
        MOV AL,0FFH
        RET
         
      CHECK ENDP
      CODE ENDS
    END START
    

    相关文章

      网友评论

          本文标题:汇编记录

          本文链接:https://www.haomeiwen.com/subject/kzihxltx.html