计算机组成原理实验程序.doc
文本预览下载声明
操作练习
将内存3500H单元开始的0-15共16个数据传递到3600H单元开始的数据区中。实验程序及流程如下:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DW 64 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,3500H ;建立源地址指针
MOV DI,3600H ;建立目标地址指针
MOV CX,0008H ;字数送入CX寄存器中
A1: MOV AX,[SI] ;取源数据一字送入AX中
MOV [DI],AX ;将源数据送入目标地址单元中
INC SI ;修正指针
INC SI
INC DI
INC DI
DEC CX ;修改循环次数
JNZ A1 ;判断是否传送完毕
A2: JMP A2
CODE ENDS ;代码段结束
END START ;程序段结束
实验步骤
编写汇编语言源程序,生成文件 *.a或*.asm 命令“masm *.a”
链接命令“link *”
生成可执行文件 *.exe
调试 命令“debug *.exe”
调试命令有
显示存储单元的命令D格式为:或_D[range]修改存储单元内容命令格式为:检查和修改寄存器内容的命令R(register)显示CPU内所有寄存器内容和标志位状态,其格式为:显示和修改某个寄存器内容,其格式为:-R register name
显示和修改标志位状态,命令格式为:运行命令G,其格式为:ess3…]] ? ?其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。跟踪命令T(Trace)逐条指令跟踪从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。多条指令跟踪从指定地址起执行n条指令后停下来,n由value指定。汇编命令A(Assemble),其格式为:该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。J反汇编命令U(Unassemble)有两种格式。从指定地址开始,反汇编32个字节,其格式为:对指定范围内的存储单元进行反汇编,格式为:命名命令N(Name),其格式为:退出DEBUG命令Q(Quit),其格式为:┅┅┅┅┅┅┅┅┅(1)
Di代表十进制数1,2,3,┅9,0;
上式转换为:
┅┅┅┅┅┅┅┅┅(2)
由式(2)可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。程序流程及参考程序如下:(规定:被转换的ASCII码十进制数存放在3500H-3504H单元中,转换结果存在于3510H-3511H单元中。)
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DW 64 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,3500H
MOV DI,3510H
MOV BX,000AH
MOV CX,0004H
MOV AH,00H
MOV AL,[SI]
SUB AL,30H
A1: IMUL BX
ADD AL,[SI+01]
SUB AL,30H
INC SI
LOOP A1
MOV [DI],AX
A2: JMP A2
CODE ENDS
END START
开始
设数据源地址、
目的地址、字节数
取源数据一字到AX中
(AX)送目标地址单元
修改指针
传完否?
停机
N
YU
开始
定义源、目标地址
定义转换位数n
加一位ASCII码减30H
传完否?
N-1→CX
N
YU
取第一位ASCII码
减去30H
乘10
存结果并停机
显示全部