汇编答案(完整版)(4)

2018-12-22 18:48

INT 21H

CMP AL, ?a‘ ;输入字符

CMP AL, ?z‘ ;输入字符>?z‘吗? JA STOP

DEC AL ;得到前导字符

MOV DL, AL ;准备显示三个字符 MOV CX, 3

DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用 INT 21H INC DL

LOOP DISPLAY STOP: RET

5.3答:程序段如下: DSEG SEGMENT STORE DB 4 DUP (?) DSEG ENDS ┇

BEGIN: MOV CL, 4 ;右移四次 MOV CH, 4 ;循环四次 LEA BX, STORE A10: MOV DX, AX

AND DX, 0FH ;取AX的低四位

MOV [BX], DL ;低四位存入STORE中 INC BX

SHR AX, CL ;右移四次 DEC CH

JNZ A10 ;循环四次完了码?

B10: MOV DL, STORE ;四组数分别放在AL、BL、CL和DL中 MOV CL, STORE+1 MOV BL, STORE+2 MOV AL, STORE+3 STOP: RET

5.4答:程序如下: DSEG SEGMENT

STRING1 DB ?I am a student.‘ STRING2 DB ?I am a student!‘ YES DB ?MATCH‘, 0DH, 0AH, ?$‘ NO DB ?NO MATCH‘, 0DH, 0AH, ?$‘ DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG, ES: DSEG

START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX

MOV AX, DSEG

MOV DS, AX ;给DS赋值 MOV ES, AX ;给ES赋值 ;

BEGIN: LEA SI, STRING1 ;设置串比较指令的初值 LEA DI, STRING2 CLD

MOV CX, STRING2 - STRING1 REPE CMPSB ;串比较 JNE DISPNO

LEA DX, YES ;显示MATCH JMP DISPLAY

DISPNO: LEA DX, NO ;显示NO MATCH

DISPLAY: MOV AH, 9 ;显示一个字符串的DOS调用 INT 21H RET

MAIN ENDP

CSEG ENDS ;以上定义代码段

;-------------------------------------------------------------------------- END START

5.5答:程序段如下:

BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H SUB AL, ?0‘

JB STOP ;输入字符?9‘吗? JA STOP CBW

MOV CX, AX ;响铃次数N JCXZ STOP

BELL: MOV DL, 07H ;准备响铃

MOV AH, 2 ;显示一个字符的DOS调用,实际为响铃 INT 21H

CALL DELAY100ms ;延时100ms LOOP BELL STOP: RET

5.6答:程序如下: DSEG SEGMENT COUNT EQU 20

ARRAY DW 20 DUP (?) ;存放数组 COUNT1 DB 0 ;存放正数的个数

ARRAY1 DW 20 DUP (?) ;存放正数 COUNT2 DB 0 ;存放负数的个数 ARRAY2 DW 20 DUP (?) ;存放负数

ZHEN DB 0DH, 0AH, ?The positive number is:‘, ?$‘ ;正数的个数是: FU DB 0DH, 0AH, ?The negative number is:‘, ?$‘ ;负数的个数是: CRLF DB 0DH, 0AH, ?$‘ DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX

MOV AX, DSEG

MOV DS, AX ;给DS赋值 BEGIN: MOV CX, COUNT LEA BX, ARRAY LEA SI, ARRAY1 LEA DI, ARRAY2

BEGIN1: MOV AX, [BX] CMP AX, 0 ;是负数码? JS FUSHU

MOV [SI], AX ;是正数,存入正数数组 INC COUNT1 ;正数个数+1 ADD SI, 2

JMP SHORT NEXT

FUSHU: MOV [DI], AX ;是负数,存入负数数组 INC COUNT2 ;负数个数+1 ADD DI, 2

NEXT: ADD BX, 2 LOOP BEGIN1

LEA DX, ZHEN ;显示正数个数 MOV AL, COUNT1

CALL DISPLAY ;调显示子程序 LEA DX, FU ;显示负数个数 MOV AL, COUNT2

CALL DISPLAY ;调显示子程序 RET

MAIN ENDP

;-------------------------------------------------------------------------- DISPLAY PROC NEAR ;显示子程序

MOV AH, 9 ;显示一个字符串的DOS调用 INT 21H

AAM ;将(AL)中的二进制数转换为二个非压缩BCD码 ADD AH, ?0‘ ;变为0~9的ASCII码 MOV DL, AH

MOV AH, 2 ;显示一个字符的DOS调用 INT 21H

ADD AL, ?0‘ ;变为0~9的ASCII码 MOV DL, AL

MOV AH, 2 ;显示一个字符的DOS调用 INT 21H

LEA DX, CRLF ;显示回车换行

MOV AH, 9 ;显示一个字符串的DOS调用 INT 21H RET

DISPLAY ENDP ;显示子程序结束 CSEG ENDS ;以上定义代码段

;-------------------------------------------------------------------------- END START

5.7答:程序段如下: BEGIN: MOV BX, 0 MOV CX, 100

COMPARE: MOV AX, DATA[BX] ;取数组的第一个偶数 ADD BX, 2

TEST AX, 01H ;是偶数吗?

LOOPNZ COMPARE ;不是,比较下一个数 JNZ STOP ;没有偶数,退出

JCXZ STOP ;最后一个数是偶数,即为最小偶数,退出 COMPARE1: MOV DX, DATA[BX] ;取数组的下一个偶数 ADD BX, 2

TEST DX, 01H ;是偶数吗?

JNZ NEXT ;不是,比较下一个数 CMP AX, DX ;(AX)<(DX)吗? JLE NEXT

MOV AX, DX ;(AX)<(DX),则置换(AX)为最小偶数 NEXT: LOOP COMPARE1 STOP: RET

5.8答:程序段如下:

BEGIN: MOV DL, 0 ;计数初始值 MOV CX, 8

COMPARE: TEST AX, 03H ;是数03吗? JNZ NOEQUAL ;不是,转走 INC DL ;是,计数

NOEQUAL: ROR AX, 1 ;准备判断下一个数 ROR AX, 1

LOOP COMPARE

ADD DL, ?0‘ ;将计数值转换为ASCII码 MOV AH, 2 ;进行显示 INT 21H STOP: RET

5.9答:程序段如下:

BEGIN: MOV BX, 0 ;用于存放四位的16进制数 MOV CH, 4 MOV CL, 4

INPUT: SHL BX, CL ;将前面输入的数左移4位 MOV AH, 1 ;从键盘取数 INT 21H

CMP AL, 30H ;<0吗?

JB INPUT ;不是?0~F‘的数重新输入 CMP AL, 39H ;是?0~9‘吗? JA AF ;不是,转?A~F‘的处理

AND AL, 0FH ;转换为:0000B~1001B JMP BINARY

AF: AND AL, 1101 1111B ;转换为大写字母 CMP AL, 41H ;又

JB INPUT ;不是?A~F‘的数重新输入 CMP AL, 46H ;>F吗?

JA INPUT ;不是?A~F‘的数重新输入 AND AL, 0FH ;转换为:1010B~1111B ADD AL, 9

BINARY: OR BL, AL ;将键盘输入的数进行组合 DEL CH JNZ INPUT

DISPN: MOV CX, 16 ;将16位二进制数一位位地转换成ASCII码显示 DISP: MOV DL, 0 ROL BX, 1 RCL DL, 1 OR DL, 30H

MOV AH, 2 ;进行显示 INT 21H LOOP DISP STOP: RET

5.10答:程序如下: DSEG SEGMENT

ENG DB ?Here is sun, sun ,…,$‘ DISP DB ?SUN:‘

DAT DB ?0000‘ , 0DH, 0AH, ?$‘ KEYWORD DB ?sun‘ DSEG ENDS

;--------------------------------------------------------------------------


汇编答案(完整版)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:虚拟仪器实验报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: