导航:首页 > 源码编译 > 微机原理编译过程

微机原理编译过程

发布时间:2022-06-10 11:48:57

㈠ 微机原理

第一题的汇编程序如下。若提问者采纳,再提供第2题的汇编程序。
.
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG
MSG DB " This is Lower case letters. $"
ORG 200H
START: MOV AH, 01H
INT 21H
CMP AL, 61H
JB NODSP
CMP AL, 7AH
JA NODSP
DSP: MOV AX, SEG MSG
MOV DS, AX
MOV DX, OFFSET MSG
MOV AH, 9
INT 21H
JMP FINISH
NODSP: MOV AL, ' '
MOV AH, 3
INT 10H
DEC DL
MOV AH, 2
INT 10H
MOV AH, 0AH
INT 10H
INC DL
MOV AH, 2
INT 10H
JMP START
FINISH: MOV AH, 4CH
INT 21H
CSEG ENDS
END START
;;以上汇编程序编译链接生成exe文件,在Win7的DOS环境运行通过。

㈡ 微机原理编好的程序怎么运行

微机原理里的语言,好像是汇编语言!需要一个编译器编译,像什么masm,tasm之类的!当然C语言编译器也可以直接嵌入汇编

㈢ 微机原理编程中nop是什么

微机原理编程中nop汇编指令的用法:
占用一个字节的程序存储空间,产生微小延迟,常用来做代码地址对齐。

1、占用一个字节的程序存储空间:
这是在对微机与单片机进行汇编指令指令编程时常用的手法,例如,为了刻意使某个程序段在一个特定的地址开始,或在某个程序段中删除了一些指令而还刻意要求地址不变,基于这些的需求,通常是应用NOP指令汇编指令来充填空闲的地址。
对于S7-STL编程语言来讲,通常是应用NOP指令汇编指令来充填被删除的指令的位置,以便留言痕迹,以便备查。通常的做法是,在删除的指令的位置写为NOP指令,重要的是在其注释之处写上原指令,留有备忘的痕迹。

2、产生微小延迟:
这是在微机与单片机进行汇编指令指令编程时常用的手法,微机与单片机的编程并非是周期扫描的执行机制,例如,在读取某个外围通道输入值时,先发出一个请求命令,带一定延时后,再读其数值,通常是应用NOP指令来进行延时。
对于西门子PLC来讲,其执行程序的机制是周期扫描,NOP指令只是起到占用周期扫描时间的作用,对于那些已固定了扫描周期时间的PLC而言,是没有意义的。

3、常用来做代码地址对齐:
这个纯粹是对与对微机与单片机进行汇编指令指令编程来讲的。这与上述的1、占用一个字节的程序存储空间的作用相同,,即汇编编译后生成机器代码的效果。

㈣ 汇编语言--微机原理

; 本程序通过编译,运行正确
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
; ---------------------------------------
; 功能:输出回车换行
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
; ---------------------------------------
Prompt_Num db 'input number(0-9): $'
Prompt_Err db 'error$'
Start: push cs
pop ds ;使数据段与代码段同段
Input_Num: Output Prompt_Num ;提示输入数字
mov ah,1
int 21h
cmp al,'0'
jb @@Error
cmp al,'9'
ja @@Error
call Output_CTLF
mov dl,al
mov ah,2
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
@@Error: call Output_CTLF
Output Prompt_Err ;提示输入错误
call Output_CTLF
jmp Input_Num
Code ENDS
END Start ;编译到此结束

㈤ 微机原理 汇编语言 小舅子考试问我些编程问题,在下实在不会,求各路英雄赐教解困。谢谢!

1.计算机系统中cpu的地址总线有21条则能寻址的最大内存空间为多少mb
答:计算机用0和1表示某种状态,一根地址线能表示两种状态,两根地址线能表示四种状态,以此类推,21根地址线能够表示2的21次幂,即2097152个字节。所以,21条地址线能寻址的最大内存空间为2MB。

2.8086栈操作一次处理多少个字节
答:2字节。

3.指令ADD AX,12H中的目的操作是什么寻址方式
答:寄存器寻址方式。

4.在8086系统中默认的8位累加器是什么
答:AL

5.PD伪指令定义变量有多少个字节
答:PD伪指令,疑为楼主误输,本意是DD吧。定义变量的伪指令:
DB:字节
DW:字(双字节)
DD:双字(四字节)
DF:六字节
DQ:八字节
DT:十字节

6.8086的AH寄存器是多少位寄存器
答:8位寄存器。

7.MOV AX[BX]指令中,目的操作数是什么
答:AX

8.POP指令的作用是什么
答:把堆栈段中栈顶指针所指的一个字弹出并赋给某个16位寄存器或16位内存单元,同时,栈顶指针加2。

9.XCHG指令的作用是什么
答:将源操作数与目的操作数的值互换。

10.用DEBUG调试程序时A命令的作用是什么
答:输入汇编语言指令。

11.MOV[BP12/12H],AX 假设(AX)=1212H,(DS)=2000H,(CS)=5000H,(SS)=6000H,(BP)=2000H计算操作书的物理地址
答:楼主这条指令有语法错误,试改为:MOV [BP+1212H],AX
则目的操作数的物理地址为:23232H

12.限定只能使用堆栈操作,不能用其它指令,将AX与BX寄存器的内容对调,写出判断程序片断。
答:不需判断,直接用push和pop指令即可实现。指令代码如下:
push ax
push bx
pop ax
pop bx

13.已知[DS]=1111H,[SS]=2222H,[ES]=3333H,[BX]=11H,[BP]=22H,计算"MOV AX,[BX]"中汇编指令源操作数寻址所指向的物理单元
答:11121H

14.已知[AL]=8AH [CL]=3;[CF]=1;以及一连续执行的汇编程序,在下列方格内分别填入每一步执行后AL和CF正确值(一共9个格子,要求写2进制数,前8个格子写AL最后一个CF。)
SHL AL,1; |0|0|0|1|0|1|0|0|1|
ROL AL,CL;|1|0|1|0|0|0|0|0|0|
RCR AL,CL;|0|0|0|1|0|1|0|0|0|

15.写出下列指令的含义分别是什么 JAE, JGE ,JB ,JCXZ
答:
1、JAE:条件转移指令,当目的操作数高于或等于源操作数时转移,用于无符号数的比较或判断。
2、JGE:条件转移指令,当目的操作数大于或等于源操作数时转移,用于有符号数的比较或判断。
3、JB:条件转移指令,当目的操作数低于源操作数时转移,用于无符号数的比较或判断。
4、JCXZ:条件转移指令,当计数寄存器CX=0时转移,用于字符串的比较活扫描。

16.1+2+3+...N累加加到1000,统计被累加的自然个数送CN,累加和送SUM
答:下面的程序通过编译、运行正确。当自然数达到45的时候,累加和为1035。
Code Segment
Assume CS:Code,DS:Code
CN DW ?
SUM Dw ?
Start: push cs
pop ds ;使数据段与代码段在同一个段
xor ax,ax ;初始化累加和
mov cx,1 ;自然数初值
Adding: add ax,cx ;相加
cmp ax,1000 ;累加和与1000相比较
jae Save_Value ;若大于或等于1000,结束累加,保存相关数据
inc cx ;计数
jmp Adding
Save_Value: mov cn,cx ;保存被累加的自然数个数
mov SUM,ax ;保存累加和
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

17.显示一个字符串倒序显示,将下面程序填写完整并写出结果
答:这道题,楼主有几处抄写错误,根据题意及原程序段,我给更正一下。凡填空处,所填内容除已经定义的标识符外,其它内容皆用小写,并在其后以“;序号”的方式标注。
DATA SEGMENT
MSG DB 'HIS IS A STRING!$'
CT=$-MSG-2
CRLF DB OAH,ODH,'$'
DATA ends ;1
CODE SEGMENT
ASSSUME DS:DATA,CS:CODE,ES:DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
lea dx,MSG ;2
MOV AH,9
INT 21H
LEA DX,CRLF
mov ah,9 ;3
INT 21H
LEA BX,MSG
ADD BX,CT
MOV CX,CT+1
NEXT:
mov dl,[bx] ;4
MOV AH,2
INT 21H
DEC BX
LOOP NEXT
mov ah,4ch ;5
INT 21H
CODE ENDS
END MAIN

补充回答:
六、判断题
(对)同一8086汇编程序中,可以多次用=伪指令对同一个常量进行定义。
(对)宏定义的长度对汇编后的程序长度没有影响,但。。。用宏的次数对汇编后的长度有影响。
(对)在8086的汇编指令中,源操作数和目的操作数不能同时存储器操作数。
(错)伪指令DW的作用是定义一个字节的数量。
(对)PUSH指令的作用是执行堆栈的压入操作。

1. 计算机系统中CPU的地址总线有21条,则其能寻址的最大内存空间 2 MB。
2. 8086系统中堆栈操作一次处理 2 个字节。
3. 指令ADD AX,RH中,目的操作数是 寄存器 寻址方式。
4. 在8086系统中,默认的8位累加器是 AL。
5. DD伪指令定义的变量有 4 个字节。
6. MOV AX,[BX] 指令中目的操作数是 B 寻址方式。
A.立即 B.寄存器 C.寄存器间接 D.直接、
7. POP指令的作用是(C)
A.将某个字数数据压入堆栈。B.将某个字节数据压入堆栈。C.将某个字数据从堆栈弹出D.将状态寄存器压入堆栈。
8. XCHG指令的作用是(C)
A.将操作数从8位扩展为16位。B.将操作数从16位压缩为8位。C.将两个操作数进行交换。D.用源操作数替换目的操作数。
9. DEBUG调试程序时,A命令的作用是(C)
A.现实数据 B. 删除数据 C.汇编程序 D.单步运行

㈥ 《计算机组成原理》和《微机原理与接口技术》、《编译原理》有什么区别

计算机组成原理主要是介绍计算机的基本硬件及原理。重在各个部分的连接。相对宽泛一些。
微机原理
,主要是微机基本程序的编译(汇编语言)及8088...等型号的接口连接,接口程序。
编译原理
,就是介绍计算机的程序编辑,相对来说不同的有了是程序的一般结构
以下引用:编译原理是
计算机专业
的一门重要专业课,旨在
介绍
编译程序
构造的一般原理和基本方法。内容包括语言和文法、
词法分析、
语法分析
、语法制导翻译、
中间代码生成

存储管理


代码优化

目标代码
生成。

㈦ 微机原理与汇编语言

JMP START 就是一个死循环呗,跳转到START那句,为的是可以多次读取开关的状态。你要是想让这个程序执行一次就退出当然也可以跳转到别的地方, 但是你没有定义STOP, 就没办法JMP了.
我估计你是不是把START这个标号理解成别的什么东西了,在这里START就是个标号,代表那句“MOV DX,01F2H”的地址,没有什么别的意思, 并不是你所理解的"程序开始".
程序写的肯定不对,问题很大,没有原题没法改,最起码你第一次IN之后得把AL保存一下吧,或者每次TEST AL之前重新IN一下,要不AL都让你给改了,你TEST它有什么用啊?
之所以说没有原题没法改是因为如下原因:
一 不知道开关Ki闭合对应的是0还是1, 你的程序把我搞糊涂了.
二 不知道你所谓的"其他情况,不做任何处理" 是 真的什么都不做 还是 让二极管全都不发光
三 假设开关闭合为1, 那如果开关状态是11111010的话, 我是应该让高四位的二极管发光呢还是什么都不做呢? 按照我对题目的理解好像应该是让高四位发光, 如果这样的话, 楼上 zsq0325 同学的程序就有问题了, 用CMP是不行的.

㈧ 汇编语言小问题 微机原理

怎么没有看到问题啊?等待中.................

第一题:
当前指令物理地址是由cs:ip决定的,则下一条指令应该是cs*16+(ip+2H)=10000H+102H=10102H
当前栈顶物理地址为SS*16+SP=40200H
[BX]对应的段寄存器是DS所以物理地址是DS*16+BX=20300H
[BP]对应的是SS所以物理地址是SS*16+BP=40400H
ES:[BX+SI]的物理地址为ES*16+BX+SI=30800H
第二题:
对16位数的第6、7、8、12、13位判断,只要用test指令就可以了
DATA SEGMENT ;数据段定义
S1 DB 'ZERO','$' ;为零时输出的内容
S2 DB 'NOT ZERO','$' ;不为零时输出的内容
DATA ENDS
CODE SEGMENT ;代码段执行
ASSUME CS:CODE,DS:DATA ;初始化
START: MOV AX,DATA
MOV DS,AX ;确定段地址
TEST BX,18EOH ;对6、7、8、12、13位进行测试
JZ Z ;如果为零跳转到Z执行
LEA DX,S2 ;不为零执行
JMP DO
Z:LEA DX,S1
DO: MOV AH,09H ;调用dos中断,输出提示信息
INT 21H
MOV AH,4CH
INT21H
CODE ENDS
END START

第三题:
MOV CL,300;溢出错误
MOV BX,Dl;原操作数和目标操作数位数不一致
MOV ES,1000H;段寄存器不能立即寻址
TEST BX,[CX];test原操作数不能用内存变量
SUB [BX],[BP+SI];内存和内存间不能直接操作

㈨ 微机原理问题谢谢回答

1、INT 21H 为何就可以显示一行hello,什么原理呢?
回答:看这个语句,MESG DB 'HELLO',0DH,0AH,'$'.这一句就像C语言里的定义一个字符串,这个字符串的前5个字节是H、E、L、L、O,然后是0DH、OAH最后是$.其中,$是字符串结束标志,就像C语言里的\0。而INT 21 这个语句调用DOS中断程序,此时AH中存放的是9,也就是调用显示DS:DX指向的字符串,也就是MESG中的字符串。而LOOP语句会让该字符串被显示10次。
2、还有既然JMP START跳过MESG,为何后面还可以使用MOV DX,OFFSET MESG?
回答:就像C语言的main之前的内容,比如:定义某个函数,编译器只会编译而不会运行,而main之后才开始运行。同理,汇编程序只会汇编START之前的内容而不会运行他们。
也就是说:BEG JMP START语句相当于定义了一个函数,该函数的功能是转到START处,但此处之时定义了该函数,并没有调用它,它的功能不会实现,故而定义完BEG后,编译程序接着定义字符串MSEG.

㈩ 8086微机原理编程题。输入两个一位十进制数,求差的绝对值结果存入内存单元,求步骤和说明,谢谢

  1. 写出基本框架

    数据段:定义变量

    代码段:

    主体代码:数据段初始化,退出代码




  2. ;basestructure
    dsegsegment
    adb0;输入的第1个数
    bdb0;输入的第2个数
    rdb0;保存的计算结果a-b
    dsegends
    csegsegment
    assumecs:cseg,ds:dseg
    start:
    movax,dseg
    movds,ax
    ;这里开始写题目要求的代码
    ;exittoos
    movah,4ch
    int21h
    csegends
    endstart
  3. 读取变量a, b, 计算a-b并写入r

    ;下面的代码需要写入上面 " ;这里开始写题目要求的代码"之后
    movah,1
    int21h;用int21H的1功能,读取一个数据字符(al)中
    subal,30H;不考虑输出非数字字符情况下,减30H即为对应的10进制数
    mova,al;保存到变量a
    int21h;读取第2个字符,这里注意,输入两个数的时侯,中间不要加回车、空格等
    ;这里,因为ah,没有发生改变,所以省略了一步movah,1
    subal,30h
    movb,al
    movbl,a;提取保存的a
    subbl,al;计算a-b,放入bl
    movr,bl;计算结果放入r
  4. 编译并调用程序

    用masm 或tasm等。

阅读全文

与微机原理编译过程相关的资料

热点内容
積架小型空气压缩机 浏览:555
绿盾文档加密系统哪里有卖 浏览:637
我的世界怎么开挂在服务器里面 浏览:789
西门子自锁正反转编程图 浏览:749
出国英语pdf 浏览:920
算法线性匹配 浏览:674
山东省dns服务器云主机 浏览:554
安卓5g软件怎么隐藏 浏览:839
编译内核空间不足开不了机 浏览:887
汉纪pdf 浏览:474
在哪里下载国家医保app 浏览:657
没有与文件扩展关联的编译工具 浏览:426
我的世界反编译mcp下载 浏览:19
安卓手柄下载什么软件 浏览:70
pushrelabel算法 浏览:850
硬盘资料部分文件夹空白 浏览:617
cssloader的编译方式 浏览:941
java面板大小 浏览:506
怎么用命令方块打出字体 浏览:500
台湾加密货币研究小组 浏览:299