『壹』 匯編循環程序
ASSUMECS:CODE,DS:DATA
DATASEGMENT
in_stringdb30,?;加上這行
STRINGDB30DUP('#');填滿結束符
NUMDB30DUP(?)
BCHARDB30DUP(?)
LCHARDB30DUP(?)
OTHERDB30DUP(?)
DATAENDS
CODESEGMENT
START:
MOVAX,DATA
MOVDS,AX
leadx,in_string;加上這三行
movah,10
int21h
MOVBX,0
MOVCX,0
MOVDX,0
MOVBP,0
LEASI,STRING
NEXT:
MOVAL,[SI]
CMPAL,'#'
JEEXIT
CMPAL,'0'
JBOTHERLETTER
CMPAL,'9'
JANOTNUM
MOVDI,BX
MOVNUM[DI],AL
INCBX
JMPONCEDONE
NOTNUM:
CMPAL,'A'
JBOTHERLETTER
CMPAL,'Z'
JANOTBLETTER
MOVDI,CX
MOVBCHAR[DI],AL
INCCX
JMPONCEDONE
NOTBLETTER:
CMPAL,'a'
JBOTHERLETTER
CMPAL,'z'
JAOTHERLETTER
MOVDI,DX
MOVLCHAR[DI],AL
INCDX
JMPONCEDONE
OTHERLETTER:
MOVDI,BP
MOVOTHER[DI],AL
INCBP
ONCEDONE:
INCSI
JMPNEXT
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
大寫的,是原來的程序。
小寫的,是為你增加的。
加上後,即有了輸入字元串功能。
『貳』 嵌入式系統中經常要用到無限循環,怎麼用C編寫死循環
這個問題用幾個解決方案。我首選的方案是:
while(1){}
一些程序員更喜歡如下方案:
for(;;)
{}
這個實現方式讓我為難,因為這個語法沒有確切表達到底怎麼回事。如果一個應試者給出這個作為方案,我將用這個作為一個機會去探究他們這樣做的基本原理。如果他們的基本答案是:"我被教著這樣做,但從沒有想到過為什麼。"這會給我留下一個壞印象。
第三個方案是用 goto
Loop:
...
goto Loop;
應試者如給出上面的方案,這說明或者他是一個匯編語言程序員(這也許是好事)或者他是一個想進入新領域的BASIC/FORTRAN程序員。
數據聲明(Data declarations)
5. 用變數a給出下面的定義
a) 一個整型數(An integer)
b)一個指向整型數的指針( A pointer to an integer)
c)一個指向指針的的指針,它指向的指針是指向一個整型數( A pointer to a pointer to an integer)
d)一個有10個整型數的數組( An array of 10 integers)
e) 一個有10個指針的數組,該指針是指向一個整型數的。(An array of 10 pointers to integers)
f) 一個指向有10個整型數數組的指針( A pointer to an array of 10 integers)
g) 一個指向函數的指針,該函數有一個整型參數並返回一個整型數(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer )
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
人們經常聲稱這里有幾個問題是那種要翻一下書才能回答的問題,我同意這種說法。當我寫這篇文章時,為了確定語法的正確性,我的確查了一下書。但是當我被面試的時候,我期望被問到這個問題(或者相近的問題)。因為在被面試的這段時間里,我確定我知道這個問題的答案。應試者如果不知道所有的答案(或至少大部分答案),那麼也就沒有為這次面試做准備,如果該面試者沒有為這次面試做准備,那麼他又能為什麼出准備呢?
Static
『叄』 匯編語言 循環程序
一個標準的循環程序應由以下四部分組成:循環准備、循環體、循環修改、循環控制。
循環准備是為循環做准備的,有循環次數和起始地址;循環體是循環程序解題所需的核心程序,題目要完成的功能在此進行;循環修改用來更新某些數據或修正循環控制的參數;循環控制是循環是否結束的控制。
如果在一個程序中的多個地方、或多個程序中的多個地方要用同一段程序,那麼可以將這段程序單獨設計,存放在某一存儲區域,每當需要執行這段程序時,就調用指令轉到這段程序去,執行完畢,再返回原來的程序。這段獨立出來的程序叫做子程序或過程,調用它的程序稱為主程序。採用子程序。使得設計結構清楚,程序的維護方便。當主程序需要執行這個子程序功能時,通過調用該子程序,執行子程序,子程序完成後返回主程序調用處,繼續主程序後面的指令的執行。與子程序有關的指令有子程序的調用CALL、子程序返回RET兩條指令。
『肆』 怎麼用匯編語言實現for循環
匯編語言實現for循環十分容易,比如51匯編,用DJNZ指令就可以了,舉例如下:
C語言:
for(i=0;i<10;i++)a=a+i;
匯編語言:
i equ 30h
m equ 31h
......
mov i,#0
mov m,#0
mov r2,#10
loop:
mov a,i
add a,m
mov m,a
djnz r2,loop
『伍』 反匯編一個程序,寫一段匯編內嵌補丁將程序的一段功能循環
用 inline patch就行了。
地址你知道了,反匯編你也能看懂,寫個這么個東西很難么?
找個nop填充的位置,一般在程序的最下邊。
然後修改循環前的代碼為jmp xxxx
xxx是你找到的nop段的地址
這時候你寫入後,如果你用了OD,OD會自動nop填充來對齊代碼,你寫入的那個位置的匯編代碼就覆蓋掉了。
記住這個指令,然後在跳轉後先執行這個,保證原始功能正常。
然後實現你自己的邏輯。
實現完了,用jmp指令調回你想調回的位置。
整個過程保證你的匯編代碼的正確性,不要破壞寄存器的值。
基本過程就是這樣了。
如果你想讓一個循環無限執行,具體的寫法你應該參考你的程序,核心思想就是修改源程序匯編指令,跳到程序nop填充的位置(程序為了位元組對齊,一定會有一些nop填充段),執行你希望的邏輯,執行完後,用jmp將控制權正確轉交個程序。程序是你寫的,控制權在你手裡,想怎麼循環怎麼循環。
這個是直接修改。用程序也能改,不過想寫出個比較通用的inline hook代碼,比較麻煩。你自用,手動來就行了。
『陸』 用匯編語言編寫51單片機程序,讓LED燈亮一秒滅一秒,無限循環,時鍾是6
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
CLR P1.0
MOV R2,#10
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E
CPL P1.0
MOV R2,#10
T0E:
RETI
END
『柒』 用匯編語言編寫51單片機程序讓LED燈亮0.5秒,滅2秒無限循環
ORG 0000H
MOV SP,#60H
E: CLR P1.0 ; P1.0 LED亮
ACALL DEL_1S ; 0.5 秒
SETB P1.0 ; P1.0 LED滅
ACALL DEL_2S ;2秒
SJMP E ; 循環
DEL_1S: MOV R2,#10 ; 0.5秒
JMP DEL_2S+2
DEL_2S: MOV R2,#40 ; 2秒
SETB TR1
LOOP: JNB TF1,$
MOV TL1,#0B0H
MOV TH1,#3CH
CLR TF1
DJNZ R2,LOOP
CLR TR1
RET
END
『捌』 在命令提示符中,如何使一段程序反復執行,請教大神啊,就是像無限循環一樣的程序
在dos環境中,執行debug(程序).exer命令查看寄存器t命令單步跟蹤g命令執行到某條指令地址u命令反匯編d命令查看數據?看幫助
『玖』 關於匯編語言的循環問題
你理解從程序上面執行下來到達 loop s後又去執行標號s處,這沒錯。然後就無限循環死,這就錯了!匯編語言的循環指令LOOP是有條件的,這個隱含操作和條件就是每循環一次,CX=CX-1,如果CX=0,循環就結束了。在這個程序中,循環3次結束。