汇编记录

2021-02-23  本文已影响0人  KN郑某某

汇编基础习题

题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
上一篇下一篇

猜你喜欢

热点阅读