南邮微机实验1

南邮微机实验1

实验1题目:

下面给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。 要求实验者按照原样对源程序进行编辑,汇编后,根据MASM给出的错误信息对源程序进行修改,直到没有语法错误为止。然后进行链接,并执行相应的可执行文件。正确的执行结果是在屏幕上显示:25+9=34。

改错后的程序

程序1:

;FILENAME:  EXA131.ASM
.486
DATA SEGMENT  USE16	;此处的segment拼写分离
	SUM  DB ?,?
	MESG DB '25+9='
	     DB 0,0,'$' ;使用9号DOS指令来显示字符串,需要以'$'结尾
	N1   DB 9 ;常量不能以字母开头。F0H需要表示成0F0H。此处我没发现0F0H有什么用,就把他删了,不耽误程序运行的。
	N2   DB 25     	;25可以用一个BYTE型表示,这样后面就不用PTR了。当然也可以用PTR解决对齐问题
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    BYTE PTR [BX],   AH

	      CALL   CHANG
	      MOV    AH, 9
	      MOV    DX, OFFSET  MESG   	;MESG拼写错成MEST
	      INT    21H
	      MOV    AH, 4CH
	      INT    21H
CHANG PROC
	LAST: CMP    [BX],10
	      JC     NEXT
	      SUB    [BX],10
	      INC    WORD PTR [BX+7];INC的目标操作数如果是内存操作数时,需要用PTR
	      JMP    LAST

	NEXT: MOV    CL,SUM
          ADD    [BX+8],CL;ADD的源操作数和目标操作数不能同时为内存操作数。这里把[BX+8]存放在寄存器CL里。
	      ADD    [BX+7],30H
	      ADD    [BX+8],30H 
	      RET
CHANG ENDP
CODE    ENDS
    END BEG

程序2

有错吗?没有错。

.486
DATA SEGMENT  USE16	
	MESG DB '25+9='
	     DB '3','4','$' 
DATA    ENDS
CODE SEGMENT USE16
	      ASSUME CS: CODE,   DS:DATA
	BEG:  MOV    AX, DATA
	      MOV    DS,AX

	      MOV    AH, 9
	      MOV    DX, OFFSET  MESG   
	      INT    21H

	      MOV    AH, 4CH
	      INT    21H
CODE    ENDS
    END BEG

实验2题目

从BUF单元开始存有一字符串(长度< 255 ),编程实现统计该串字符中的ASCII码在 42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。

程序

.486
DATA SEGMENT  USE16	
	MESG DB '@ABCDE'
    CNT EQU $-MESG
DATA    ENDS
CODE SEGMENT USE16
	        ASSUME   CS: CODE,   DS:DATA
	BEG:    MOV      AX, DATA
	        MOV      DS,AX
            MOV      CX,CNT
            MOV      DL,0;DL有初值,记得清空

	        MOV      BX, OFFSET MESG
	JEC:    CMP      BYTE PTR [BX],42H;不能PTR成WORD,不然他会把后面一个字节的内容包含进来
            JC       NEXT;如果小于42H,跳转下一个
            CMP      BYTE PTR [BX],45H
            JA       NEXT;如果大于45H,跳转下一个
            INC      DL;题目说最多255个,那么用DL就能存的下计数。
    NEXT:   INC      BX
            LOOP     JEC
            CALL     DISP
	        MOV      AH, 4CH
	        INT      21H
;二进制显示
DISP PROC
            MOV      CX,8
            MOV      BL,DL
    LAST2:  MOV      DL,'0'
            RCL      BL,1
            JNC      NEXT2
            MOV      DL,'1'
    NEXT2:  MOV      AH,2H
            INT      21H
            LOOP     LAST2
            RET
DISP ENDP
CODE    ENDS
    END BEG
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值