计算机(Intel 8086)是如何执行一条指令的例如:详述指令MOV AL,[1000H]在计算机内部的执行过程。

计算机(Intel 8086)是如何执行一条指令的例如:详述指令MOV AL,[1000H]在计算机内部的执行过程。,第1张

先计算物理地址,ds段中偏移量为1000H的EA。

比如DS=3000h,

EA=3000H×10H+1000H=31000H

一个总线周期的t1输出EA到地址总线,存储器在数据总线上释放31000H的字节数据。

t2~t4中cpu读回此数据,并存入AL。

通常,一条指令的执行分为取指令阶段、分析及取数阶段和执行阶段3个过程。

(1)取指令

取指令阶段完成将现行指令从内存中取出来并送到指令寄存器中,具体 *** 作为:首先,将程序计数器PC中的内容通过地址总线送至内存地址寄存器;第二,向仙存发读命令;第三,从内存中取出的指令经数据寄存器、数据总线送到指令寄存器中;第四,将PC的内容递增,为取下一条指令做好准备。

(2)分析及取数指令

取出指令后,机器立即进入分析及取数阶段,指令译码器ID可识别和区分不同的指令类型及各种获取 *** 作数的方法。由于各条指令功能不同,寻址方式也不同,所以分析及取数阶段的 *** 作是不同的。

(3)执行

执行阶段完成指令规定的各种 *** 作,产生运算结果,并将结果存储起来。

总之,计算机的基本工作过程可以概括为取指令、分析及取数、执行等,然后再取下一条指令,

如此周而复始,直到遇到停机指令或外来事件的干预为止。

下载个MASM5,建个。ASM文件,在里面写好程序后,在命令行下,进入MASM的目录,比如你放在C盘

c:\masm5>

然后编译程序

c:\masm5>masm XXasm

其中会出现两个文件问你是否要建,可以不用管直接回车两次,生成目标文件,

最后

c:\masm5>link XX

也是可以直接回车两次生成EXE。

然后命令行下

c:\masm5>debug xxexe

进入调试你的程序。

8086汇编程序(包括masm、link、exe2bin以及你的程序)都是16位的程序,可以在兼容16位dos程序的 *** 作系统上直接运行,比如win81的X86系统中虚拟的dos窗口(cmdexe)中直接运行。

但win81的X64系统已经不再支持16位的应用程序了,这时你就需要安装dosbox软件,运行这个软件后会给你虚拟出一个dos环境。

1首先用中断10把计算器的图形界面显示出来

2调用读键盘功能,读入相关的数字和符合

3把输入状态分为第一数数据,运算符,第二数据,运算,显示,几个过程

4或者直接输入,然后用二数据运算法则分析输入的表达式,并计算结果

5显示出来

8086/8088汇编程序常量的定义:

要靠汇编语言中的伪指令来实现,例如:

1 表达式赋值伪指令EQU

PMAX EQU 256

XAB EQU PMAX-6

2 等号伪指令=

EMP=7

这些都是在程序运行过程中,数值不变的量,叫符号常量

汇编时,程序中的符号常量 如:PMAX、EMP将会用常量256、7来替换。

8086/8088汇编程序常量的定义是不会为其分配数据段或是其他段的存储器单元的。

存储器单元的值 是可以改变的 是不可以做常量的 存储器只能做变量。

呵呵 满意 就选满意回答啊

; 本程序在MASMPlus 12集成环境下通过编译,经过调试,运行正确。

Code Segment

Assume CS:Code,DS:Code

; -------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -------------------------------------

; 功能:输出一个字符

; 入口:dl=要显示的字符

Output_Chr proc Near

push ax

mov ah,02h

int 21h

pop ax

ret

Output_Chr Endp

; -------------------------------------

; 功能:输出回车换行

Output_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

Output_CTLF Endp

; -------------------------------------

; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示

; 入口:AX=二进制数

; 出口:在当前光标位置显示转换后的ASCII码数字

Dec_ASCII Proc Near

push ds

push cs

pop ds

push cs

pop es

push dx

push bx

push di

mov bx,10

lea di,@@Temp_Save[6]

mov BYTE ptr [di],'$'

dec di

cld

@@Divide: xor dx,dx

div bx

or dl,30h

mov [di],dl

dec di

test ax,0ffffh

jnz @@Divide

inc di

push di

pop dx

mov ah,9

int 21h

pop di

pop bx

pop dx

pop ds

ret

@@Temp_Save db 7 dup()

Dec_ASCII EndP

; -------------------------------------

; 功能:把AL中的二进制无符号数作为小数转换成显式的十进制ASCII码,

; 并送显示屏显示,未考虑四舍五入

; 入口:AH=二进制数,BH=除数,CX=保留小数位数

; 出口:在当前光标位置显示转换后的ASCII码数字

Dec_Frac Proc Near

push ax

mov dl,''

call Output_Chr ;显示一个小数点

pop ax

mov bl,10 ;乘数

@@Dec_Frac: mov al,ah ;余数不为0,处理小数部分

mul bl ;余数乘10,继续做除法

div bh ;除以除数,取商数作为结果的一位小数

or al,30h

mov dl,al

call Output_Chr ;显示一位小数

loop @@Dec_Frac

ret

Dec_Frac EndP

; -------------------------------------

SCORE db 76,69,84,90,73,88,99,63,100,80 ; 成绩单

Elements equ ($-SCORE)/Type SCORE ;元素个数

RESULT db 6 dup(0) ; 各分数段计数

prompt_Res db '00---59: $'

prompt_100 db '----100: $'

Press_Key db 7,13,10,13,10,'The complated Press any key to exit$'

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

; -------------------------------------

; 统计低于60分,60~69分,70~79分,80~89分,90~99分和100分各分数段人数并显示

lea si,SCORE ; 成绩首地址

mov cx,Elements ;成绩数目

mov dl,10 ; 用于除10

cld

@@Statics: lodsb ; 提取成绩

xor ah,ah

div dl ; 除10

cmp al,5 ; >5,及格

jg $+4

mov al,5 ; <=5,不及格

sub al,5 ; 减5,分数段计数地址偏移量

cbw ;

push ax

pop bx

inc RESULT[bx] ; 计数增1

loop @@Statics ; 循环,统计下一个成绩

mov bl,59h

mov cx,5

lea si,RESULT ;各分数段计数数组首地址

lea dx,prompt_Res ; 统计结果字符串地址

List_Res: mov ah,9 ;显示分数段提示信息

int 21h

lodsb ;读入计数值

xor ah,ah

call Dec_ASCII ; 显示统计结果

call Output_CTLF ;输出一个回车、换行

mov al,bl

inc al

daa

mov bl,al

push cx

mov cl,4

xor ah,ah

shl ax,cl

shr al,cl

or ax,3030h

xchg ah,al

mov WORD ptr Prompt_Res,ax

mov al,bl

add al,9

mov bl,al

xor ah,ah

shl ax,cl

shr al,cl

or ax,3030h

xchg ah,al

mov WORD ptr Prompt_Res[5],ax

pop cx

loop List_Res

Output prompt_100 ;提示显示100分的人数

lodsb ;读入100分计数值

xor ah,ah

call Dec_ASCII ; 显示统计结果

; -------------------------------------

Exit_Proc: Output Press_Key ;提示 *** 作完成,按任意键结束程序

mov ah,1

int 21h

mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

以上就是关于计算机(Intel 8086)是如何执行一条指令的例如:详述指令MOV AL,[1000H]在计算机内部的执行过程。全部的内容,包括:计算机(Intel 8086)是如何执行一条指令的例如:详述指令MOV AL,[1000H]在计算机内部的执行过程。、简要说明计算机执行一条指令的基本 *** 作。、8086汇编程序的编译和调试方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10116365.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存