西安电子科技大学微机原理与系统设计实验 课程上机报告

西安电子科技大学

微机原理与系统设计实验   课程上机报告

上机内容 1-DEBUG程序调试及上机步骤、2-顺序程序设计、3-分支程序设计 、4-循环程序设计、5-子程序设计、6-DOS系统功能调用、7-字符串程序设计、8-宏指令程序设计


上机内容一(1) DEBUG程序调试

一、上机目的

学习使用DEBUG常用调试命令;

学习用DEBUG命令调试简单程序;

通过调试,熟悉汇编语言指令、寄存器、标志位、堆栈等。

二、上机内容

用DEBUG的命令对简单程序段进行调试练习(内容参看本小节第三部分)。

三、DEBUG练习程序段

1在DEBUG下用A命令输入以下加法程序段,按照命令运行程序。

-A CS:0106  ↙

 MOV AX,1234

MOV BX,2345

MOV CX,0

ADD AX,BX

MOV CX,AX

INT 20

运行程序。

-R ↙  ;显示各寄存器当前内容及首条指令

-T 3 ↙  ;跟踪执行三条赋值传送指令,观察寄存器及标志位

-T 2 ↙  ;跟踪执行相加及传送结果指令,观察寄存器及标志位

-G   ↙  ;执行软件中断指令INT 20

实验现象记录与分析:观察与记录按照上述要求命令执行后,哪些寄存器和标志位发生了变化。

T3:AX,BX,CX寄存器分别发生变化同时IP也随着指令执行而变化

T2:CX和IP寄存器发生变化

2在DEBUG下用A命令输入以下加法程序段,按照命令运行程序。

-A CS:116 ↙

MOV AX,[0124]

MOV BX ,[0126]

ADD AX,BX

MOV [0128],AX

INT 20

DW 3333

DW 9999

DW 0

设置断点分段运行程序。

-G=CS:116 11D ↙ ;从指定地址开始运行程序,至断点11DH停止,这时两个数已取至AX和BX,但还没有求和

-G122 ↙ ;从上一断点运行至新断点停止,这时已完成求和并存入结果到指定单元

-G ↙ ;完成程序的执行

观看内存内容:

-DCS:116 12A ↙ ;显示本程序小段目标代码和数据单元内容

-UCS:116 12A ↙ ;反汇编指定范围的内存内容

实验现象记录与分析:观察与记录按照上述要求命令执行后,相应寄存器和标志位的变化;观察与记录指定范围内存的内容及对应指令,进一步理解汇编语言的概念。

指令先执行116到11d的指令,再跳转到122指令并执行,结果正确,ax=cccc

3在DEBUG下用A命令输入以下字符串显示程序段,按照命令运行程序。

-A CS:0192  ↙

MOV DX,19B

MOV AH,9

INT 21

INT 20

DB ‘HELLO,WORLD! $’

用P 命令单步执行。

实验现象记录与分析:观察与记录使用P命令执行后,相应寄存器和标志位的变化。

主要是pf标志位变化,寄存器ax和ip随着指令变化。

分析:分析与查看‘HELLO,WORLD!$’在内存中存放的地址范围和对应的ASCII码。

-D    19b         1a7     ;

ASCII码为: 48 45 4C 4C 4F 2C 57 4F 52 4C 44 21 24 

4在DEBUG下用A命令输入以下加法程序段,按照命令运行程序。

-A CS:0100 ↙

MOV AL,74

ADD AL,70

MOV AL,7A

ADD AL,94

MOV AL,43

ADC AL,65

INT 20

用P命令单步执行。

实验现象记录与分析:观察与记录每条指令执行后AX寄存器及标志位变化;分析与理解进位与溢出的概念。

5在DEBUG下用A命令输入以下BCD码乘法程序段,按照命令运行程序。

-A CS:0100 ↙

MOV AL,05

MOV BL,09

MUL BL

AAM

INT 20

用P 命令单步执行。

实验现象记录:观察与记录每条指令执行后,AX、BX以及标志位的变化;分析与理解BCD码乘法的调整。

6在DEBUG下用A命令输入以下主程序与子程序段,按照命令运行程序。

-A CS:0100 ↙

MOV AX,0200

MOV DX,0000

CALL AX           ;调用子程序

MOV DX,1234

ADD DH,DL

MOV [0300],DX

INT 20

;********下面是子程序段********

 -A CS:0200 ↙

PUSH AX

MOV AX, 5678

POP AX

RET

用P命令或T命令跟踪执行。

实验现象记录与分析:

跟踪执行程序,观察与记录在子程序调用过程中IP、SP、堆栈栈顶存储单元内容的变化;分析与理解堆栈、子程序调用断点的保护与恢复。

上机内容一(2) 汇编语言程序设计实验基本步骤

一、上机目的

掌握汇编源程序编写的基本格式;

熟悉汇编语言程序设计实验环境;

掌握汇编语言源程序编辑、汇编、连接、调试的基本步骤;

掌握MASM、LINK、DEBUG的使用方法。

二、上机内容

对一个汇编语言源程序进行编辑、汇编、连接与调试。

代码描述:

代码:

DATA SEGMENT

DA1 DB'HELLO,WORLD!'

DB 0DH,0AH,'$'

DATA ENDS

STACK SEGMENT

ST1 DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,STACK

MOV SS,AX

MOV AX,DATA

MOV DS,AX

MOV AH,9

MOV DX,OFFSET DA1

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

汇编、连接与调试:

  • 上机过程或步骤
  1. 建立工作目录,在D盘建立zhangsan文件夹,并将源程序myfile.asm文件和masm.exe、link.exe文件复制至该文件夹
  2. 编辑如上的源程序
  3. 进入dos环境
  4. 汇编源程序生成.obj文件
  5. 连接.obj文件生成.exe文件
  6. 运行.exe程序,检查结果
  7. 进入debug环境,调试程序

上机内容二 顺序程序设计

一、上机目的

1.掌握指令编程及程序调试的方法;

2.学会运用顺序程序解决实际问题的方法。 

二、上机内容

1.学习示例并运行。

2.根据题目要求编写程序。参考示例步骤,写出上机过程,观察现象,记录结果,进行分析。

1)计算y=a×b+c-18,其中a、b、c分别为3个有符号(或无符号)的8位二进制数。

2)用查表法,将一位十六进制数(0~F)转换成对应的ASCII码(只考虑大写字母)。

三、上机过程或步骤

  1. 建立工作目录,在D盘建立8086文件夹,并将源程序文件和masm.exe、link.exe文件复制至该文件夹
  2. 编辑如上的源程序(具体代码见下)
  3. 进入dos环境
  4. 汇编源程序生成.obj文件
  5. 连接.obj文件生成.exe文件
  6. 进入debug环境,调试程序,检查结果

  • 上机程序

示例代码:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

XL DW ?;请在此处给X低位赋值

XH DW ?;请在此处给X高位赋值

YL DW ?;请在此处给Y低位赋值

YH DW ?;请在此处给Y高位赋值

ZL DW ?

ZH DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV AX,XL

ADD AX,YL

MOV ZL,AX

MOV AX,XH

ADC AX,YH

MOV ZH,AX

INT 03H

CODE ENDS

END START

题目1代码:

STACK SEGMENT

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

DAT1 DB ?

DAT2 DB ?

DAT3 DB ?

DAT4 DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

MOV AL,DAT1

MOV BL,DAT2

IMUL BL

MOV BX,AX

MOV AL,DAT3

CBW

ADD AX,BX

SUB AX,18

MOV DAT4,AX

MOV AH,4CH

INT 21H

CODE ENDS

END START

题目2代码:

assume ds:data,cs:code

data segment

table DB  30H,31H,32H,33H,34H,35H,36H,37H

        DB  38H,39H,41H,42H,43H,44H,45H,46H

hex DB ?;设置你想要的转换的16进制数

ascll DB 0;用于保存转换之后的值

data ends

code segment

start:

mov ax,data

mov ds,ax

lea si,table

mov al,hex

mov bx,si

XLAT

mov ascll,al

INT 03H

code ends

end start

  • 上机结果分析与总结

示例:

题目一:

通过e命令,将a、b、c,分别赋值为11H、45H、14H,得出y的值为497H,计算符合结果。

题目2:

将hex赋值为6,结果为36H,结果正确。

上机内容三 分支程序设计

一、上机目的

1.掌握分支程序的设计与调试方法;

2.掌握分支程序的指令和基本结构;

3.学会运用分支程序解决实际问题的方法。

二、上机内容

1.学习示例并运行。分析两个示例的分支结构及实现程序转移的指令。

2.根据题目要求编写程序。写出上机过程,观察现象,记录结果,进行分析。

1)用分支结构,将一位十六进制数(0~F)转换成对应的ASCII码(只考虑大写字母)。

2)在DS数据段存放着某班20个同学的微机原理考试成绩。统计≥90分、80分~89分、70分~79分、60分~69分和<60分的人数,并将统计的结果放在当前数据段偏移地址为BUFFER的顺序单元中。

三、上机过程

  1. 建立工作目录,在D盘建立8086文件夹,并将源程序文件和masm.exe、link.exe文件复制至该文件夹
  2. 编辑如上的源程序(具体代码见下)
  3. 进入dos环境
  4. 汇编源程序生成.obj文件
  5. 连接.obj文件生成.exe文件
  6. 进入debug环境,调试程序,检查结果
  • 上机程序

示例1代码:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

DAT1 DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

MOV AL,DAT1

CMP AL,0

JNS POSI

NEG AL

POSI: MOV DAT1,AL

MOV AH,4CH

INT 21H

CODE ENDS

END START

示例2代码:

STACK SEGMENT

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

JADT DW N1

DW N2

DW N3

DW N4

STRING1 DB 'This is a procedure 1',0AH,0DH,'$'

STRING2 DB 'This is a procedure 2',0AH,0DH,'$'

STRING3 DB 'This is a procedure 3',0AH,0DH,'$'

STRING4 DB 'This is a procedure 4',0AH,0DH,'$'

ER DB 'ERROR',0AH,0DH,'$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

AGAIN:MOV AH,01H

INT 21H

CMP AL,'Q'

JE EXIT

CMP AL,'q'

JE EXIT

CMP AL,31H

JB ERROR

CMP AL,34H

JA ERROR

SUB AL,30H

SHL AL,01H

CBW

MOV DI,AX

JMP JADT[DI-2]

N1:

MOV DX,OFFSET STRING1

MOV AH,09H

INT 21H

JMP AGAIN

N2:

MOV DX,OFFSET STRING2

MOV AH,09H

INT 21H

JMP AGAIN

N3:MOV DX,OFFSET STRING3

MOV AH,09H

INT 21H

JMP AGAIN

N4:MOV DX,OFFSET STRING1

MOV AH,09H

INT 21H

JMP AGAIN

ERROR:MOV AH,09H

MOV DX,OFFSET ER

INT 21H

JMP AGAIN

EXIT:MOV AH,4CH

INT 21H

CODE ENDS

END START

题目1代码:

STACK SEGMENT

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

data segment

hex db ?

ascll DB ?     

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov al,hex       ;将一个字节的16进制存储在ax的低位中

add al,30h

cmp al,39h

jbe convertEnd ;judge below zero 小于等于

add al,7

convertEnd:

mov ascll,al

int 03h

code ends

end start

题目2代码:

DATA SEGMENT

DATA1 DB 20 DUP(?)

DATA2 DB 5 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV CX,20

LEA SI,DATA1

LEA DI,DATA2

AGAIN:MOV AL,[SI]

CMP AL,90

JC NEXT1

INC BYTE PTR[DI]

JMP STO

NEXT1:CMP AL,80

JC NEXT2

INC BYTE PTR[DI+1]

JMP STO

NEXT2: CMP AL,70

JC NEXT3

INC BYTE PTR[DI+2]

JMP STO

NEXT3: CMP AL,60

JC NEXT4

INC BYTE PTR[DI+3]

JMP STO

NEXT4:INC BYTE PTR[DI+4]

STO:INC SI

LOOP AGAIN

MOV AH,4CH

INT 21H

CODE ENDS

END START

  • 上机结果分析与总结

示例1:

示例2:

题目1:

题目2:

上机内容四 循环程序设计

一、上机目的

1.掌握循环程序的设计与调试方法;

2.掌握循环程序的指令和基本结构;

3.学会运用循环程序解决实际问题的方法。

二、上机内容

1.学习示例并运行。分析此示例的循环结构及组成部分。

2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。

1)将ADRS开始存放的10个字节的数据传送到ADRD开始的连续内存中。假设它们的段地址分别存放在DS和ES中。

2)将ADRS开始存放的10个字节的数据传送到ADRD开始的连续内存中。假设它们的段地址分别存放在DS和ES中。如果传送过程中出现‘#’时,立即停止传送。

3)设DATBUF中存放有10个无符号数(或有符号数),将10个数据按照数值大小递减排列。

4)设DATBUF中存放有10个无符号数(或有符号数),求它们的最小值和最大值,将最小值放入DATMIN单元,最大值放入DATMAX单元。

三、上机过程或步骤

  1. 建立工作目录,在D盘建立8086文件夹,并将源程序文件和masm.exe、link.exe文件复制至该文件夹
  2. 编辑如上的源程序(具体代码见下)
  3. 进入dos环境
  4. 汇编源程序生成.obj文件
  5. 连接.obj文件生成.exe文件
  6. 进入debug环境,调试程序,检查结果

四、上机程序

示例代码:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

ORG 3000H

DATA1 DB 16 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

MOV DI,OFFSET DATA1

MOV CL,[DI]

XOR CH,CH

MOV BL,CH

INC DI

A1:

MOV AL,[DI]

TEST AL,80H

JE A2

INC BL

A2:

INC DI

LOOP A1

MOV [DI],BL

INT 03H

CODE ENDS

END START

题目1:

data segment

        adrs dw ?

                adrd dw ?

        data1 db 10 dup(0)

        data2 db 10 dup(0)

data ends

stack segment

stack ends

code segment

        assume cs:code,ds:data,ss:stack

start:

        mov ax,data

        mov ds,ax

        mov si,adrs

        mov di,adrd

        mov cx,10

next:

        mov al,[si]

        mov [di],al

        inc di

        inc si

        dec cx

        jnz next

        mov ah,4ch

        int 21h

code ends

        end start

题目2:

data segment

        adrs dw ?

        adrd dw ?

        data1 db 10 dup(0)

        data2 db 10 dup(0)

data ends

stack segment

stack ends

code segment

        assume cs:code,ds:data,ss:stack

start:

        mov ax,data

        mov ds,ax

        mov si,adrs

        mov di,adrd

        mov cx,10

next:

        mov al,[si]

        cmp al,23H

        JE NEXT0

        mov [di],al

        inc di

        inc si

        dec cx

        jnz next

NEXT0:

        mov ah,4ch

        int 21h

code ends

        end start

题目3:

DSEG   SEGMENT

DATBUF DW 10 DUP(?)

DSEG   ENDS

CSEG   SEGMENT

ASSUME CS:CSEG,DS:DSEG

START: MOV AX,DSEG

       MOV DS,AX

       LEA DI, DATBUF

       MOV BL,9

NEXT1: MOV SI,DI

       MOV CL,BL

NEXT2: MOV AX,[SI]

       INC SI

       INC SI

       CMP AX,[SI]

       JC NEXT3   ;小于则不交换

       MOV DX,[SI]

       MOV [SI-2],DX

       MOV [SI],AX

NEXT3: DEC CL

       JNZ NEXT2

       DEC BL

       JNZ NEXT1

       MOV AH,4CH

       INT 21H

CSEG   ENDS

       END START

题目4:

 DATA SEGMENT

    DATBUF DB 15,1,2,3,0,8,14,13,10,5 ;定义数组  

DATA ENDS

CODE SEGMENT

    ASSUME CS:CODE ,DS:DATA

START:

    MOV AX,DATA

    MOV DS,AX

                       

    XOR CX,CX          

    MOV CL,1O          

    SUB CL,1

    

    MOV SI,OFFSET DATBUF  ;使指针si指向array

    MOV BH,[SI]          ;把si指向的内容赋值给bh

    MOV BL,[SI]          ;把si指向的内容赋值给bl

    INC SI               ;si指针自增1

      

    CALL FIND            ;执行find子程序,其程序功能是找出最大与最小值

    INT 03H               

    MOV AH,4CH           ;结束程序

    INT 21H

FIND PROC

X:  MOV AL,[SI]     ;把si指向地址的内容赋值给AL

    

    CMP AL,BL       ;al和bl比较

    JB  CHANGE_BL   ;如果al比较小则跳change_bl函数

    

F:  CMP AL,BH       ;al和bh比较

    JA CHANGE_BH    ;如果al比较大则跳转change_bh函数

NEXT:

    INC SI    ;si指针自增1

    LOOP X    ;做循环 当cl=0时,退出循环执行下一条语句

    JMP OVER  ;跳到over函数

CHANGE_BL:    ;把al的值赋给bl

    MOV BL,AL

    JMP F     ;跳f函数

CHANGE_BH:    ;把al的值赋给bh

    MOV BH,AL

    JMP NEXT  ;跳next函数

OVER:         ;结束子函数

    RET

FIND ENDP                   

CODE ENDS

END START

  • 上机结果分析与总结

示例:

题目1:

题目2:

题目3:

题目4:

上机内容五 子程序设计

一、上机目的

1.掌握子程序的设计与调试方法;

2.理解参数传递的方法;

3.掌握子程序调用的指令和基本结构;

4.学会用子程序解决实际问题的方法。

二、上机内容

1.学习示例并运行。考虑如何通过寄存器及堆栈方式进行参数传递。

2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。

1)统计一个字中的1的个数。采用段内调用实现。

2)统计一个字中的1的个数。采用段间调用实现。

三、上机过程或步骤

四、上机程序

示例:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

BCD1 DB 5 DUP(?)

ADSEG DW ?

ADOFST DW ?

LENG1 DW ?

RESULT DW ?

DATA ENDS

CODEM SEGMENT

ASSUME CS:CODEM,DS:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,STACK

MOV SS,AX

MOV AX,SEG BCD1

MOV ADSEG,AX

MOV AX,OFFSET BCD1

MOV ADOFST,AX

MOV AX,LENGTH BCD1

MOV LENG1,AX

CALL FAR PTR BCD_16B

MOV AH,4CH

INT 21H

CODEM ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATA,ES:DATA

BCD_16B PROC FAR

PUSH BX

PUSH AX

PUSH SI

PUSH ES

PUSH DS

MoV AX,DATA

MOV DS,AX

MOV ES,ADSEG

MOV SI,ADOFST

MOV CX,LENG1

ADD SI,CX

DEC SI

MOV DX,0

BCDL:

PUSH CX

MOV AL,ES:[SI]

DEC SI

AND AL,0FH

CBW

MOV BX,AX

MOV AX,DX

MOV CX,10

MUL CX

MOV DX,AX

ADD DX,BX

POP CX

LOOP BCDL

MOV ES:RESULT,DX

POP DS

POP ES

POP SI

POP AX

POP BX

RETF

BCD_16B ENDP

CODES ENDS

END START

题目1:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

DATA1 DW ?

COUNT DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV AX,DATA1

MOV CL,0

CALL CUNT

MOV AH,4CH

INT 21H

CUNT PROC NEAR

A:TEST AX,0FFFFH

JZ B

SHL AX,1

JNC A

INC CL

JMP A

B:MOV COUNT,CL

CUNT ENDP

CODE ENDS

END START

题目2:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

DATA1 DW 7521H

COUNT DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV AX,DATA1

MOV CL,0

CALL FAR PTR CUNT

MOV AH,4CH

INT 21H

CODE ENDS

CODEM SEGMENT

ASSUME CS:CODEM

CUNT PROC FAR

A:TEST AX,0FFFFH

JZ B

SHL AX,1

JNC A

INC CL

JMP A

B:MOV COUNT,CL

RETF

CUNT ENDP    

CODEM ENDS

END START    

  • 上机结果分析与总结

示例:

题目1:

题目2:

上机内容六 DOS系统功能调用

一、上机目的

1.掌握DOS系统功能调用的程序设计方法;

2.学会用DOS系统功能调用解决实际问题的方法。

二、上机内容

1.学习示例并运行。分析此示例中DOS系统功能调用的过程。

2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。

1)用AH=02H功能,在PC机的显示器上显示“HOW ARE YOU TODAY?”

2)用AH=09H功能,在PC机的显示器上显示“HOW ARE YOU TODAY?”

3)实现从键盘接收一串字符并回显,且统计与显示出该字符串的长度。

三、上机过程或步骤

四、上机程序

示例:

STACK SEGMENT STACK

DB 256 DUP(?)

STACK ENDS

DATA SEGMENT

STRING DB'PLEASE INPUT STRING'

DB 0DH,0AH,'$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV DX,OFFSET STRING

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

题目1:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

DAT1 DB 'HOW ARE YOU TODAY?$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV DI,OFFSET DAT1

MOV CX,18

NEXT:MOV DL,[DI]

MOV AH,02H

INT 21H

INC DI

LOOP NEXT

MOV AH,4CH

INT 21H

CODE ENDS

END START

题目2:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

DAT1 DB 'HOW ARE YOU TODAY?$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV DX,OFFSET DAT1

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

题目3:

DATA   SEGMENT                               

INPUT  DB  "Please input a string: ",'$'

OUTPUT DB  "Your input is: ",'$'

BUFFER DB  20     ;预定义20字节的空间

       DB  ?     ;待输入完成后,自动获得输入的字符个数

       DB  20  DUP(0)    

CRLF   DB  0AH, 0DH,'$'                   

DATA   ENDS                                  

STACK  SEGMENT   STACK                       

       DW  20  DUP(0)                      

STACK  ENDS                                  

CODE   SEGMENT                              

ASSUME CS:CODE, DS:DATA, SS:STACK            

START:                                       

        MOV AX, DATA                         

        MOV DS, AX                      

        LEA DX, INPUT                        ;打印提示输入信息    

        MOV AH, 09H  

        INT 21H

        LEA DX,BUFFER                        ;接收字符串

        MOV AH, 0AH

        INT 21H

        MOV AL, BUFFER+1                     ;对字符串进行处理

        ADD AL, 2

        MOV AH, 0

        MOV SI, AX

        MOV BUFFER[SI], '$'

        LEA DX, CRLF                         ;另取一行                   

        MOV AH, 09H  

        INT 21H

        LEA DX, OUTPUT                       ;打印提示输出信息

        MOV AH, 09H  

        INT 21H

        LEA DX, BUFFER+2                     ;输出输入的字符串

        MOV AH, 09H  

        INT 21H

        LEA DX, CRLF                         ;另取一行                  

        MOV AH, 09H  

        INT 21H

        MOV DL,BUFFER+1                       ;打印提示输出信息

        ADD DL,48

        MOV AH, 02H  

        INT 21H

        MOV AH, 4CH                          ;返回DOS系统

        INT 21H

CODE   ENDS                                  

END    START                                 

  • 上机结果分析与总结

示例:

题目1:

一、上机目的

1.掌握字符串指令及字符串程序设计的方法;

2.学会用字符串程序解决实际问题的方法。

二、上机内容

1.学习示例并运行。分析编写字符串程序需要什么样的步骤。

2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。

1)设在数据段中定义了:

STRING DB ‘Today is Sunday & July 15,2018’

实现将STRING中的“&”用“/”代替并将替换后的字符串显示出来。

2)将字符‘#’装入以AREA为首址的100个字节中。

三、上机过程或步骤

  1. 建立工作目录,在D盘建立zhangsan文件夹,并将源程序myfile.asm文件和masm.exe、link.exe文件复制至该文件夹
  2. 编辑如上的源程序
  3. 进入dos环境
  4. 汇编源程序生成.obj文件
  5. 连接.obj文件生成.exe文件
  6. 运行.exe程序,检查结果
  7. 进入debug环境,调试程序

四、上机程序

示例:

STACK SEGMENT

DB 64 DUP(?)

STACK ENDS

DATA SEGMENT

STR1 DB 'ASSEMBLE LANGUAGE'

DATA ENDS

EDD SEGMENT

STR2 DB 20 DUP(?)

EDD ENDS

CODE SEGMENT

ASSUME SS:STACK,DS:DATA,CS:CODE,ES:EDD

START:

MOV CX,17

MOV AX,DATA

MOV DS,AX

LEA SI,STR1

MOV AX,EDD

MOV ES,AX

LEA DI,STR2

CLD

REP MOVSB

MOV AH,4CH

INT 21H

CODE ENDS

END START

题目1:

STACK SEGMENT

DB 64 DUP(?)

STACK ENDS

DATA SEGMENT

STR1 DB 'ASSEMBLE LANGUAGE'

DATA ENDS

EDD SEGMENT

STR2 DB 20 DUP(?)

EDD ENDS

CODE SEGMENT

ASSUME SS:STACK,DS:DATA,CS:CODE,ES:EDD

START:

MOV CX,17

MOV AX,DATA

MOV DS,AX

LEA SI,STR1

MOV AX,EDD

MOV ES,AX

LEA DI,STR2

CLD

REP MOVSB

MOV AH,4CH

INT 21H

CODE ENDS

END START

题目2:

STACK SEGMENT

DW 256 DUP(?)

STACK ENDS

DATA SEGMENT

STR1 DB'#'

AREA DW ?

STR2 DB 150 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK,ES:DATA

START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

LEA DI,AREA

MOV AX,'##'

MOV CX,50

CLD

REP STOSW

MOV AH,4CH

INT 21H

CODE ENDS

END START

  • 上机结果分析与总结

示例:

题目1:

题目2:

上机内容八 宏指令程序设计

一、上机目的

1.学习宏指令程序的设计与调试;

2.学会用宏指令程序解决实际问题的方法。

二、上机内容

1.学习示例并运行。分析宏指令结构与子程序结构的特点。

2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。

利用宏指令实现对某寄存器左移/右移几位,从而实现对某一存储单元的数据进行左移/右移几位。

三、上机过程或步骤

四、上机程序

示例:

SDISP MACRO STR

LEA DX,STR

MOV AH,09H

INT 21H

ENDM

STACK SEGMENT

DB 256 DUP(?)

STACK ENDS

DATA SEGMENT

DAT1 DB 'How are you?$'

DAT2 DB 0DH,0AH,'$'

DAT3 DB 'I am fine.$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

SDISP DAT1

SDISP DAT2

SDISP DAT3

MOV AH,4CH

INT 21H

CODE ENDS

END START

题目:

SHIFT MACRO N,REG,DIR

MOV CL,N

S&DIR REG,CL

ENDM

STACK SEGMENT

DB 256 DUP(?)

DATA SEGMENT

DATA1 DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV AL,DATA1

MOV DL,AL

SHIFT 4,DL,HR

MOV DATA1,DL

MOV AH,4CH

INT 21H

CODE ENDS

END START

  • 上机结果分析与总结

示例:

题目:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值