欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

南邮微机实验1

程序员文章站 2022-06-20 20:23:30
...

南邮微机实验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
相关标签: 其他 其他