汇编作业题答案 下载本文

内容发布更新时间 : 2024/4/28 23:02:21星期一 下面是文章的全部内容请认真阅读。

50 编写程序,从键盘上输入一个无符号字整数,用“四进制”格式输出它的值

(也就是,每2位二进制看作一位四进制数,使用数字0~3)。 答: INCLUDE YLIB.H

DATA SEGEMNT

MESS1 DB 0DH, 0AH, ‘Input a number please : $’

MESS2 DB 0DH, 0AH, ‘The number in quardri_system is: $’ DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX LEA DX, MESS1

CALL READDEC ;输入一个无符号整数 MOV BX, AX ;转存到BX LEA DX, MESS2 MOV AH, 9 INT 21H ;输出前导信息 MOV CX, 8 ONE: ROL BX, 1 ROL BX, 1 ;最高2位移到最低位 MOV DL, BL ;转存到DL AND DL, 0000 0011B ;保留最低2位

OR DL, 30H ;转换成ASCII代码 MOV AH, 2 INT 21H ;输出 LOOP ONE CALL CRLF

MOV AX, 4C00H

INT 21H CODE ENDS END START

51编写程序,把一个30个元素的有符号字数组ARRAY按照各元素的正负分别送

入数组P和M,正数和零元素送P数组,负数送M数组。 答: DATA SEGEMNT

ARRAY DW 30 DUP(?) ;汇编之前置入数据

EXIT: CODE ADD DI, 2

LOOP LOOPOUT MOV AX, 4C00H INT 21H ENDS END START

52 缓冲区BUFFER中存放有字符串,以0为结束标志。编写程序,把字符串中的

大写字母转换成小写字母。 答: DATA SEGEMNT

BUFFER DB ‘A String for Test.’, 0 DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX LEA BX, BUFFER ;BUFFER缓冲区指针 ONE: MOV AL, [BX] ;从缓冲区取出一个字符 AND AL, AL

JZ QUIT ;为零,处理完成 CMP AL, ‘A’ JB NEXT CMP AL, ‘Z’

P DW 30 DUP(?)

M DW 30 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START:

MOV AX, DATA MOV DS, AX LEA BX, ARRAY ;ARRAY数组指针 MOV SI, 0 ;P数组指针 MOV DI, 0 ;M数组指针 MOV CX, 30 ONE: MOV AX, [BX] ;从ARRAY数组取出一个数据 AND AX, AL JGE PLUS ;正数、零转PLUS MINUS: MOV M[DI], AX ;负数存入M数组 ADD DI, 2 JMP NEXT PLUS: MOV P[SI], AX ;正数、零存入P数组 ADD SI, 2 NEXT: ADD BX, 2 LOOP ONE

MOV AX, 4C00H INT 21H CODE ENDS END START

JA NEXT ADD AL, ‘a’-‘A’ MOV [BX], AL NEXT: INC BX JMP ONE QUIT: MOV AX, 4C00H INT 21H CODE ENDS END START

53 编写程序,从键盘上输入无符号字整数X,Y的值,进行X+Y的运算,然后按

以下格式显示运算结果和运算后对应标志位的状态。 SUM=XXXX

ZF=Y,OF=Y,SF=Y,CF=Y

(其中X为十进制数字,Y为0或1) 答: INCLUDE YLIB.H CODE SEGMENT

ASSUME CS: CODE

MESS1 DB 0DH, 0AH, ‘Input a unsigned integer please : $’

MESS2 DB 0DH, 0AH, ‘SUM=$’ MESS3 DB 0DH, 0AH, ‘ZF=’ ZF DB ?

DB ‘, OF=’ OF DB ?

DB ‘, SF=’ SF DB ?

DB ‘, CF=’ CF DB ?

DB 0DH, 0AH, ‘$’ START:

PUSH CS POP DS LEA DX, MESS1 CALL READDEC MOV CX, AX ;输入X

LEA DX, MESS1

CALL READDEC ;输入Y ADD AX, CX ;求和

PUSHF ;保留标志位状态 LEA DX, MESS2

CALL WRITEDEC ;输出两个数的和 POP BX ;标志寄存器内容转存入BX MOV AL, ‘0’

TEST BX, 100 0000B ;测试ZF

;测试CF ;输出标志位状态

54 编写程序,从键盘上输入一个字符串,统计其中数字字符,小写字母,大写

字母,空格的个数并显示。 答:

INCLUDE YLIB.H

CODE SEGMENT

ASSUME CS: CODE

MESS1 DB 0DH, 0AH, ‘Input a string please : $’ BUFFER DB 81, ?, 81 DUP(?)

MESS2 DB 0DH, 0AH, ‘Digits: $’

MESS3 DB 0DH, 0AH, ‘Uppercase alphabet: $’ MESS4 DB 0DH, 0AH, ‘Lowercase alphabet: $’ MESS5 DB 0DH, 0AH, ‘Space : $’ START:

PUSH CS POP DS LEA DX, MESS1 MOV AH, 09H INT 21H ;输出提示信息

JZ SKP1

INC AL SKIP1: MOV ZF, AL MOV AL, ‘0’

TEST BX, 1000 0000 0000B JZ SKP2 INC AL SKIP2: MOV OF, AL

MOV AL, ‘0’

TEST BX, 1000 0000B JZ SKP3 INC AL SKIP3: MOV SF, AL

MOV AL, ‘0’

TEST BX, 1 JZ SKP4 INC AL SKIP4: MOV CF, AL LEA DX, MESS3 MOV AH, 9 INT 21H MOV AX, 4C00H INT 21H CODE ENDS END START

;测试OF

;测试SF

LEA DX, BUFFER MOV AH, 0AH INT 21H XOR DX, DX XOR BX, BX MOV CL, BUFFER+1 MOV CH, 0 ;输入字符串

;各计数器清零

;字符个数送CX LEA SI, BUFFER+2 ONE: MOV AL, [SI] CMP AL, ‘ ‘ JNE L2 L1: INC DL JMP NEXT L2: CMP AL, ‘0’ JB NEXT CMP AL, ‘9’ JA L4 L3: INC DH JMP NEXT L4: CMP AL, ‘A’ JB NEXT CMP AL, ‘Z’ JA L6 L5: INC BH JMP NEXT L6: CMP AL, ‘a’ JB NEXT CMP AL, ‘z’ JA NEXT INC BL NEXT: INC SI LOOP ONE

PUSH DX MOV AL, DH LEA DX, MESS2 MOV AH, 0

CALL WRITEDEC LEA DX, MESS4 MOV AL, BL MOV AH, 0

CALL WRITEDEC LEA DX, MESS3 MOV AL, BH

MOV AH, 0

;设置字符指针 ;取出一个字符

;空格字符计数

;数字字符计数

;大写字符计数

;小写字母计数

;循环控制

;输出数字字符个数 ;输出小写字母个数