微机原理编程
① 微机原理这本书的重点是编程吗
重点当然不是编程,可以说没有任何编程的东西。应该学会的是计算机的体系结构和内部工作原理。谢谢采纳
② 微机原理的编程问题 急!!!100分!
DATA SEGMENT ;定义数据段
BUF DB -3,1,2.... ;定义变量
BUF1 DB 1000 DUP(?) ;预留1000字节的空间
DATA ENDS ;数据段定义结束
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA ;段寄存器关联说明
START: ;代码段第一条指令从这里开始
MOV AX,DATA ;数据段段址→ax
MOV DS,AX ;ax→ds,给数据段段寄存器赋值
LEA SI,BUF ;变量BUF有效地址→SI
MOV CX,1000 ;变量BUF元素个数→CX
MOV AX,[SI] ;变量BUF的第一个字数据→AX
LP: CMP AL,0 ;AL<0?
JL NEXT ;是,转NEXT处执行
INC SI ;变量BUF元素地址增1
DEC CL ;CL-1→CL
JNZ LP ;CL不等于0,转LP处执行循环体
NEXT: MOV BUF1,AL ;AL送变量BUF1保存
MOV AH,4CH ;结束程序
INT 21H ;dos功能调用
CODE ENDS ;代码段定义结束
END START ;编译到此结束
程序段功能: 从变量BUF的1000个有符号字节数种找到第一个负数,把这个负数存于BUF1单元。
从程序段来看,这段程序的编者必是初学汇编语言。提两点建议:
1、有一处错误:
DEC CL
从程序功能来看,此处必须要用:
DEC CX
因为你要从1000个有符号字节数中找出第一个负数,而8位计数器CL能存的最大无符号数是255,那么用指令:
DEC CL
实际上是只从前255个元素中查找,而漏掉了后面的745个元素。如果前255个元素中没有负数,执行结果必然是错误的。
2、Intel 8086/8088体系结构的内存管理是分段式的,教科书及老师都习惯于这种模式,这是正确的。但我们作为初学,只是练习,无论是数据量还是代码量,都很有限,没有必要分这个段、那个段的,完全可以在一个段里进行,即把DS、ES及SS,统统地设置成与代码段同段。下面,以另一种方式来实现这个功能,仅供参考。
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
BUF DB -3,1,2....
Element equ ($-BUF)/type BUF ;元素个数
BUF1 DB ?
START:push cs
pop ds
push cs
pop es
lea si,BUF
mov cx,Elements
LP: lodsb
cmp al,0
jl $+4
loop LP
MOV BUF1,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
③ 微机原理编程中nop是什么
微机原理编程中nop汇编指令的用法:
占用一个字节的程序存储空间,产生微小延迟,常用来做代码地址对齐。
1、占用一个字节的程序存储空间:
这是在对微机与单片机进行汇编指令指令编程时常用的手法,例如,为了刻意使某个程序段在一个特定的地址开始,或在某个程序段中删除了一些指令而还刻意要求地址不变,基于这些的需求,通常是应用NOP指令汇编指令来充填空闲的地址。
对于S7-STL编程语言来讲,通常是应用NOP指令汇编指令来充填被删除的指令的位置,以便留言痕迹,以便备查。通常的做法是,在删除的指令的位置写为NOP指令,重要的是在其注释之处写上原指令,留有备忘的痕迹。
2、产生微小延迟:
这是在微机与单片机进行汇编指令指令编程时常用的手法,微机与单片机的编程并非是周期扫描的执行机制,例如,在读取某个外围通道输入值时,先发出一个请求命令,带一定延时后,再读其数值,通常是应用NOP指令来进行延时。
对于西门子PLC来讲,其执行程序的机制是周期扫描,NOP指令只是起到占用周期扫描时间的作用,对于那些已固定了扫描周期时间的PLC而言,是没有意义的。
3、常用来做代码地址对齐:
这个纯粹是对与对微机与单片机进行汇编指令指令编程来讲的。这与上述的1、占用一个字节的程序存储空间的作用相同,,即汇编编译后生成机器代码的效果。
④ 微机原理编程题
MOV AL,[40H];从数据段下偏移地址为40H的地址中取数据送入AL
AND AL,OFH;此处OFH应为0FH,刚才取出的数据与0FH相与,也即高四位清零,第四位保持不变
MOV AH,AL;低四位数据送入AH
MOV AL,[41H];再从[41H]单元取数据
AND AL,OFH;保留低四位
MOV CL,4;后面怎么没用到?
SHL AH,CL;(本条指令丢失了)
OR AL,AH;[40H]单元的低四位与[41H]单元的高四位组合
MOV [42H],AL组合以后的结果存储到【42H】单元
⑤ 微机原理编程
CODESEGMENT
ASSUMECS:CODE
START:PUSHCS
POPDS
PUSHCS
POPES
MOVCX,10000
MOVDX,1
MOVAX,0
@1:
ADDAX,DX
JC@2;有符号数范围则改为jo@2
INCDX
LOOP@1
@2:
MOVAX,DX
DECDX
MOVAX,DX
MOVBX,10
CALLDSPAXX
MOVAH,4CH
INT21H
;================================
;输出ax的值,输出的进位制在bx中设定,bx=2~16
DSPAXXPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHF
XORCX,CX
;MOVBX,16
@DSPAXX_1:
XORDX,DX
DIVBX
INCCX
ORDX,30H
PUSHDX
CMPAX,0
JNE@DSPAXX_1
MOVAH,2
@DISPAXX_2:
POPDX
CMPDL,3AH
JB@DISPAXX_3
ADDDL,7
@DISPAXX_3:
INT21H
LOOP@DISPAXX_2
MOVDL,32
INT21H
POPF
POPDX
POPCX
POPBX
POPAX
RET
DSPAXXENDP
;===============================
CODEENDS
ENDSTART
⑥ 微机原理,汇编语言,编程题
第三题:
1+2+3+……+n >= 500
大于等于?
一千也是大于等于。
一万也行,两万也行。。。
这就没有边了。
⑦ 微机原理8259A初始化编程
在8259A内部有两组寄存器,一组为命令寄存器,用于存放CPU写入的初始化命令字ICW1~ICW4(initialization
command
words);另一组为操作命令寄存器,用于存放CPU写入的操作命令字OCW1~OCW3(operation
command
words)。
初始化命令字ICW的格式:
当地址线A0为1时,8259A提供了4个(ICW1~ICW4)初始化命令字,并规定了严格的初始化步骤。
初始化编程为:
MOV
AL,13H
OUT
200H,AL
;
设置ICW1(边沿触发,单片,需要ICW4)
MOV
AL,80H
OUT
201H,AL
;
设置ICW2(中断类型号)
MOV
AL.13H
OUT
201H,AL
;
设置ICW4(特殊全嵌套,非缓冲,自动中断结束)
8259A是中断系统的核心器件,对它的初始化编程要涉及中断系统的软、硬件的许多问题,而且一旦完成初始化,所有硬件中断源和中断处理程序都必须受其制约。
⑧ 微机原理 编程题
CODESEGMENT
ASSUMECS:CODE
TABLE1DB0,1,4,9,16,25,36,49,64,81,100,121,144,169,186,225
DB100DUP(0)
START:
PUSHCS
POPDS
PUSHCS
POPES
MOVBL,0
@1:
MOVAH,1
INT21H
CMPAL,13
JE@2
SHLBL,1
MOVBH,BL
SHLBH,1
SHLBH,1
ADDBL,BH
ANDAL,0FH
ADDBL,AL
JMP@1
@2:
CALLLFCR
MOVAL,BL
LEABX,TABLE1
XLAT
CALLDSPAL
MOVAH,4CH
INT21H
LFCR:PUSHAX
PUSHDX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
POPDX
POPAX
RET
;===============================
DSPALPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHF
XORAH,AH
XORCX,CX
MOVBL,10
@DSPAL1:
DIVBL
INCCX
MOVDL,AH
XORAH,AH
ORDX,30H
PUSHDX
CMPAL,0
JNE@DSPAL1
MOVAH,2
@DISPAL2:
POPDX
INT21H
LOOP@DISPAL2
MOVDL,32
INT21H
POPF
POPDX
POPCX
POPBX
POPAX
RET
DSPALENDP
;================================
CODEENDS
ENDSTART
⑨ 微机原理编程 求和问题,急!!!!
1.把所有的待处理数放到一个数组里,这个数组定义为a。另外定义一个正数变量b,初始化为0
2.用for循环对a里的所有数除以2判断是否是偶数。(有余数就不是偶数)
3.是偶数的,a里的数保持不变,同时b自加一;不是偶数的,改为0,b不变。
4.a里的所有数据处理完后,对a做加法,把所有偶数的和求出。b的数为偶数个数。
⑩ 微机原理,编程
。。。其中 X 和Y 都是内存数据...。。。
胡说!
出题的人,根本就不懂微机原理。
微机原理,讲的是:CPU、存储器、IO接口。
在微机原理中,哪有什么数据?
正确说法应该是:
。。。X、Y,都是存储器的地址。。。
