1.下面给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。 要求实验者按照原样对源程序进行编辑,汇编后,根据MASM给出的错误信息对源程序进行修改,直到没有语法错误为止。然后进行链接,并执行相应的可执行文件。正确的执行结果是在屏幕上显示:25+9=34。
.486
DATA SEGMENT USE16
SUM DB ?,?
MESG DB '25+9='
DB 0,0,'$'
N1 DB 9,0F0H
N2 DW 25
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET SUM
MOV AH,N1
MOV AL,BYTE PTR N2
ADD AH,AL
MOV [BX],AH
CALL CHANG
MOV AH,9
MOV DX,OFFSET MESG
INT 21H
MOV AH,4CH
INT 21H
CHANG PROC
LAST:
CMP BYTE PTR [BX],10
JC NEXT
SUB BYTE PTR [BX],10
INC BYTE PTR [BX+7]
JMP LAST
NEXT:
MOV CL,SUM
ADD [BX+8],CL
ADD BYTE PTR [BX+7],30H
ADD BYTE PTR [BX+8],30H
RET
CHANG ENDP
CODE ENDS
END BEG
2.从BUF单元开始存有一字符串(长度< 255 ),编程实现统计该串字符中的ASCII码在 42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。
.586
DATA SEGMENT USE16
BUF DB '123ABC456xyz'
LL = $-BUF
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:
MOV AX,DATA
MOV DS,AX
CALL COMPUTE ;计算该字符串中ASCII码在 42H~45H之间的字符个数
CALL DISP; 以二进制形式显示在屏幕
MOV AH,4CH
INT 21H
COMPUTE PROC
MOV DL,0
MOV CX,LL
LEA BX,BUF
LAST:
CMP BYTE PTR [BX],'B'
JC NEXT
CMP BYTE PTR [BX],'E'
JA NEXT
INC DL
NEXT:
INC BX
LOOP LAST
RET
COMPUTE ENDP
DISP PROC
MOV BL,DL
MOV CX,8
LAST:
MOV DL,'1'
SAL BL,1
JC NEXT
MOV DL,'0'
NEXT:
MOV AH,02H
INT 21H
LOOP LAST
RET
DISP ENDP
CODE ENDS
END BEG