汇编语言北大上机考试基本功训练(一)

来源:互联网 发布:淘宝双12报名要求 编辑:程序博客网 时间:2024/04/28 14:07

题目:


输入两个单位十进制数(0-7之间),要求:
1)用十六进制输出两数的和
2)用四位二进制输出两数的差,要求差必须大于等于0
3)用两位十进制输出两数的积

分析:


考核知识点:


单个十进制数字的输入
基本数学运算(加法/减法和乘法/除法)
数字的十六进制显示
数字的二进制显示
数字的十进制显示

考点提要:


单个十进制数字的输入


使用01H号Dos功能调用,将用户输入的数据接收在AL中
代码如下:


  MOV AH, 01H
  INT 21H

基本数学运算(加法/减法和乘法)


单个的无符号数的加法/减法和乘法,只需要使用ADD, SUB, MUL即可

数字的十六进制显示


数字在计算机内部是以二进制形式来存储的,二进制与十六进制之间存在这简单的4位4位的对照关系:


  二进制  十六进制
  0000  0
  0001  1
  0010  2
  0011  3
  0100  4
  0101  5
  0110  6
  0111  7
  1000  8
  1001  9
  1010  A
  1011  B
  1100  C
  1101  D
  1110  E
  1111  F
所以,在以十六进制显示时,只要按照这个对照关系将存储在机器内的二进制数以四位为一组进行翻译即可

数字的二进制显示


数字在计算机内部是以二进制形式来存储的,所以在以二进制方式显示时最简单直接的方法是什么都不必做,只需要一位一位的将它显示出来即可数字的十进制显示 要将存储在计算机内部的二进制数字以十进制形式来显示,可以有多种方法,其中的一种比较好理解的做法称作:除权显商法.这种方法的核心思想是将要显示的数除以它的最高为的权,显示商,将余数再做同样的处理...最终余数变为一位就除以1,显示最后一个商(其实也就是余数本身了).这个做法有一个弊端,就是在操作之前要知道这个二进制数的大小,如果不知道大小就无法找到其最高权位,只能从可能的最大权位开始除起,在遇到第一个非零商之前的所有商都应该抛弃.但是本例要求必须以两位十进制来显示,所以对于第一个零也要显示.

源代码如下(见1.asm):


DATA SEGMENT
P1 DB 'INPUT THE 1ST NUM(0-7):$'
P2 DB 'INPUT THE 2ST NUM(0-7):$'
ERR DB 'BAD FROMAT! INPUT AGAIN:$'
PHE DB 'HE(IN H FROMAT):$'
PCHA DB 'CHA(IN B FROMAT):$'
PJI DB 'JI(IN D FROMAT):$'
NUMMIN DB ?
NUMMAX DB ?
HE DB ?
CHA DB ?
JI DB ?
NOZERO DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX, OFFSET P1
CALL PROMPT
LEA DI,NUMMIN
CALL INPUT
LEA DX,P2
CALL PROMPT
LEA DI,NUMMAX
CALL INPUT
CALL SORT
CALL MYADD
CALL MYSUB
CALL MYMUL
CALL DISPHE
CALL DISPCHA
CALL DISPJI
MOV AH,4CH
INT 21H
;-----------------------------
MYDIV PROC
PUSH CX
XOR AX, AX
MOV AL, BL
DIV CL
MOV BL, AH
ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
POP CX
RET
MYDIV ENDP
;-----------------------------

;-----------------------------
DISPJI PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX, OFFSET PJI
CALL PROMPT
MOV BL, JI
MOV CL, 10
CALL MYDIV
MOV CL, 1
CALL MYDIV
POP DX
POP CX
POP BX
POP AX
RET
DISPJI ENDP
;-----------------------------

;-----------------------------
DISPCHA PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX, OFFSET PCHA
CALL PROMPT
MOV BL, CHA
MOV CL, 4
SHL BL, CL
MOV CX, 4
NEXTBIT:
ROL BL, 1
MOV BH, BL
AND BH, 01B
JE DISP0
DISP1:
MOV DL, '1'
MOV AH, 02H
INT 21H
JMP DISPCHACONTINUE
DISP0:
MOV DL, '0'
MOV AH, 02H
INT 21H
DISPCHACONTINUE:
LOOP NEXTBIT
MOV DL, 'B'
MOV AH, 02H
INT 21H
POP DX
POP CX
POP BX
POP AX
RET
DISPCHA ENDP
;-------------------------------

;-----------------------------
DISPHE PROC
PUSH AX
PUSH CX
PUSH DX
MOV DX, OFFSET PHE
CALL PROMPT
MOV BL, HE
MOV CH, 2
MOV NOZERO, 0
NEXT4BITS:
MOV CL, 4
ROL BL, CL
MOV AL, BL
AND  AL, 0FH
CMP AL, 0AH
JB DISPHEX
ADD AL, 07H
DISPHEX:
CMP AL, 0
JNE DISP
CMP NOZERO, 0
JNE DISP
JMP CONTINUE
DISP:
MOV NOZERO, 1
ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
CONTINUE:
SUB CH, 1
JNE NEXT4BITS
CMP NOZERO, 0
JNE DISPHEXEXIT
MOV DL, 30H
MOV AH, 02H
INT 21
DISPHEXEXIT:
MOV DL, 'H'
MOV AH, 02H
INT 21H
POP DX
POP CX
POP AX
RET
DISPHE ENDP
;------------------------------


;-----------------------------
MYMUL PROC
PUSH AX
XOR AX, AX
MOV AL, NUMMIN
MUL NUMMAX
MOV JI, AL
POP AX
RET
MYMUL ENDP
;-----------------------------

;-----------------------------
MYSUB PROC
PUSH AX
XOR AX, AX
MOV AL, NUMMAX
SUB AL, NUMMIN
MOV CHA, AL
POP AX
RET
MYSUB ENDP
;-----------------------------

;-----------------------------
MYADD PROC
PUSH AX
PUSH DX
MOV AL, NUMMIN
ADD  AL, NUMMAX
MOV HE, AL
POP DX
POP AX
RET
MYADD ENDP
;-----------------------------


;-----------------------------
SORT PROC
PUSH AX
MOV AL, NUMMIN
CMP AL, NUMMAX
JBE SORTEXIT
XCHG AL, NUMMAX
XCHG AL, NUMMIN
SORTEXIT:
POP AX
RET
SORT ENDP
;------------------------------


;------------------------------
INPUT PROC
PUSH AX
PUSH DX
INPUTSTART:
MOV AH, 01H
INT 21H
CMP AL, 30H
JB INPUTERR
CMP AL, 37H
JA INPUTERR
SUB AL, 30H
MOV [DI], AL
JMP INPUTEXIT
INPUTERR:
CALL CRLF
MOV DX, OFFSET ERR
MOV AH, 09H
INT 21H
CALL CRLF
JMP INPUTSTART
INPUTEXIT:
POP DX
POP AX
RET
INPUT ENDP
;------------------------------

;------------------------------
PROMPT PROC
PUSH AX
CALL CRLF
MOV AH, 09H
INT 21H
CALL CRLF
POP AX
RET
PROMPT ENDP
;------------------------------

;------------------------------
CRLF PROC
PUSH DX
PUSH AX
MOV DL, 0DH
MOV AH, 02H
INT 21H
MOV DL, 0AH
MOV AH, 02H
INT 21H
POP AX
POP DX
RET
CRLF ENDP
;------------------------------

CODE ENDS
END START



----------------------------------------------
原创粉丝点击