一、程序改错(显示25+9=34)
排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可执行文件。正确的执行结果在屏幕上显示:25+9=34。
.486
DATA SEGMENT USE16 ; error1: SEGMENT 关键词有空格
SUM DB ?,? ; error2: 多了一个逗号
MESG DB '25+9='
DB 0, 0, '$' ; error3: 添加结束标志 '$'
N1 DB 9, 0F0H ; error4: 十六进制字母开头的数字,需要以0开始
N2 DB 25 ; error5: 数据类型为DB
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, N2
ADD AH, AL
MOV [BX], AH
CALL CHANG
MOV AH, 9
MOV DX, OFFSET MESG ; error6: 是MESG不是MEST
INT 21H
MOV AH, 4CH
INT 21H
CHANG PROC ; error7: 不用加冒号
LAST:
CMP byte ptr [BX], 10 ; error8: 指定内存单元大小
JC NEXT
SUB byte ptr [BX], 10 ; error9: 指定内存单元大小
INC byte ptr [BX+7] ; error10: 指定内存单元大小
JMP LAST
NEXT:
MOV AH, SUM ; error11:
ADD [BX+8], AH
ADD BYTE PTR [BX+7], 30H ; error12: 长度不匹配
ADD BYTE PTR [BX+8], 30H ; error13: 放个位上的数
RET
CHANG ENDP ; error14: 不用加冒号
CODE ENDS
END BEG
二、统计字符串(42H~45H)
从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串中的ASCII在42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。
.486
DATA SEGMENT USE16
BUF DB 'ABBBCDEFGH' ; 实质: 统计BCDE的个数
COUNT EQU $-BUF ; COUNT: 字符串长度
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX, DATA
MOV DS, AX
MOV BL, 0 ; BL=满足条件的字符个数,初始值为0
MOV SI, 0 ; BUF数组下标,初始值为0
MOV CX, COUNT
CALL COMPARE ; 调用比较函数
CALL DISP
EXIT: MOV AH, 4CH
INT 21H
COMPARE PROC
LAST: CMP BUF[SI], 42H
JC NEXT ; 小于 42H, JUMP NEXT
CMP BUF[SI], 45H
JA NEXT ; 大于 45H, jump
INC BL ; 8位
NEXT: INC SI
LOOP LAST
RET ; 子程序返回
COMPARE ENDP
DISP PROC ; 以二进制输出,BL中存储的就是二进制
MOV CL, 8 ; 显示位8位
LAST: MOV DL, '0'
RCL BL, 1 ; 带进位的循环左移
JNC NEXT ; C=0,则跳转直接显示
MOV DL, '1'
NEXT: MOV AH, 2
INT 21H
LOOP LAST
RET
DISP ENDP
CODE ENDS
END BEG
文章来源:https://www.toymoban.com/news/detail-717845.html
我们输入的是字符串是 ‘ABBBCDEFGH’,在范围42H~45H,即字符等于BCDE的个数为 00000110,为 5 个,结果正确文章来源地址https://www.toymoban.com/news/detail-717845.html
到了这里,关于南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!