㈠ 微機原理
第一題的匯編程序如下。若提問者採納,再提供第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微機原理編程題。輸入兩個一位十進制數,求差的絕對值結果存入內存單元,求步驟和說明,謝謝
寫出基本框架
數據段:定義變數
代碼段:
主體代碼:數據段初始化,退出代碼
;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
讀取變數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
編譯並調用程序
用masm 或tasm等。