程序功能:用深度優(yōu)先搜索法解決八皇后問題并打印結(jié)果.
創(chuàng)新互聯(lián)建站專注于白堿灘網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供白堿灘營(yíng)銷型網(wǎng)站建設(shè),白堿灘網(wǎng)站制作、白堿灘網(wǎng)頁設(shè)計(jì)、白堿灘網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造白堿灘網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供白堿灘網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
;列數(shù)行數(shù)分別用1-8標(biāo)記.所以八皇后的位置申請(qǐng)了9個(gè)
;調(diào)試感慨:匯編調(diào)試實(shí)在麻煩,不像C中在任何地方加個(gè)printf就可以知道
;哪錯(cuò)了.跳來跳去的,不知哪里死循環(huán)了,實(shí)在不好調(diào)試.
.model small,stdcall
;由于皇后位置都是一位數(shù),所以加上30H后作字符打印出.
printResult macro
local again,print,first
push si ;不能改變它的值.
mov ah,02h ;輸出狀態(tài)不變.
mov cx,2 ;對(duì)稱的結(jié)果,所以打兩個(gè)結(jié)果.
again:
mov si,1
print:
mov dl,queen[si]
cmp cx,2
je first
mov bl,9
sub bl,dl
mov dl,bl
first:
add dl,30h
int 21h
inc si
cmp si,9 ;到第9個(gè)就是說打完了.
jnz print
mov dl,' ' ;輸出兩個(gè)空格,為好看.
int 21h
int 21h
loop again
pop si
endm
.data
;改來改去,何必那么小氣呢?用9個(gè)多方便,就一個(gè)字節(jié),不必這么小氣!
queen db 9 dup(0)
used db 9 dup(0)
Nresult dw 0 ;結(jié)果的個(gè)數(shù).
prompt db "The positions are:",0ah,0dh,'$'
over db 0ah,0dh,"The number of the result is $"
.code
;函數(shù)功能:把存在ax寄存器里的二進(jìn)制數(shù)用十進(jìn)制打印出來.
printaxd proc near
mov bx,10000d ;二個(gè)字節(jié)的數(shù)最大就3萬多.
mov ch,0 ;還沒出現(xiàn)第一個(gè)要打印的數(shù)(最高位的非0不需要打印)
mov cl,5 ;最多有五位,所以一共除五次.
mov si,ax ;哈哈,寄存器太聰明了.
go:
mov ax,si
mov dx,0 ;既然是除法,就要保證高位的絕對(duì)值最小.
div bx
dec cl ;除一次就減一次.
mov di,ax ;除完就把商移走,位置讓出來給bx/10
mov si,dx ;保證余數(shù).
;實(shí)現(xiàn)bx/10.
mov ax,bx
mov bx,10 ;記住乘除法運(yùn)算不能用立即數(shù).
mov dx,0 ; 實(shí)際上dl的最大值也就是9小于10,但為了保險(xiǎn)和習(xí)慣,還是用這一句.
div bx
mov bx,ax
mov ax,di
cmp cl,0 ;如果到最后一位了,無論是0還是不為0,都要打印了.
jz next
or ch,al
jz go
next:
mov ch,1 ;有打印的了
mov dl,al
add dl,30h
mov ah,02h
int 21h
cmp cl,0
jnz go
ret ; This line cann't be forgotten.
printaxd endp
main proc far
mov ax,@data
mov ds,ax
mov es,ax
mov dx,offset prompt
mov ah,09h
int 21h
mov si,1 ;當(dāng)然是從第一列開始.
go:
inc queen[si] ;當(dāng)前列向下走一步.
;測(cè)試是否走出8*8的格子了
cmp queen[si],9
jnz stay
;剛好踏出格子,就把當(dāng)前列置0,把上一列所在行置空,然后繼續(xù)go.
mov queen[si],0
dec si
;取消所占的行.
mov al,queen[si] ;不知何以不能用movzx di,queen[si]
cbw
mov di,ax
mov used[di],0
;是否完成搜索.
cmp si,1
jnz go
;調(diào)試記語:為什么為5時(shí)不退出呢?改成4后結(jié)果居然對(duì)了.最后一個(gè)疑問了!
;對(duì)!原來如此!退出是要在queen[1]為5時(shí),當(dāng)4變成5時(shí),這個(gè)增加的過程
;在go的第一句,也就是說此時(shí)還為4.
;于是退出條件就是當(dāng)此時(shí)第一列為4而又要向前址走一步時(shí)根據(jù)對(duì)稱性
;就要退出了.
cmp queen[si],4 ;利用對(duì)稱性,如果第一列算到5行,就不用算了.
je exit
jmp go
stay: ;留在方格內(nèi),那么就剩下是否滿足不在同一行同一斜行的問題了.
mov al,queen[si] ;不知何以不能用movzx di,queen[si]
cbw
mov di,ax
cmp used[di],1 ;如果為1就說明當(dāng)前列的當(dāng)前行已使用.
je go
;循環(huán)檢查是否有在同一斜行的皇后.
mov di,si
dec di ; bx指向與當(dāng)前列比較的列.
check:
cmp di,0
je checkover
mov dx,si ;dx裝著當(dāng)前列與檢測(cè)列的差.,差最大不過7,所以也可以說是裝在dl中.
sub dx,di
mov al,queen[si] ;al放兩列的行之差.
sub al,queen[di]
cmp al,dl ;相等或相反就是在同一斜行.
je go
neg al ;求負(fù)數(shù).
cmp al,dl
je go
dec di
jmp check
checkover:
;好,現(xiàn)在可以留下來了.
cmp si,8
jz result
;如果不是最后一列.
mov al,queen[si] ;不知何以不能用movzx di,queen[si]
cbw
mov di,ax
mov used[di],1 ;留下來這一行就占住了.
inc si
jmp go
result: ;好,一個(gè)結(jié)果出來了,根據(jù)對(duì)稱,實(shí)際出來兩個(gè)結(jié)果.
add Nresult,2
printResult
mov queen[si],0
dec si
;這四行初為設(shè)計(jì)上的漏洞,想了老半天.
mov al,queen[si] ;不知何以不能用movzx di,queen[si]
cbw
mov di,ax
mov used[di],0
jmp go
exit:
mov dx,offset over
mov ah,09h
int 21h
mov ax,Nresult
call printaxd
mov ah,01h ; to pause
int 21h
mov ah,4ch
int 21h
main endp
end main
要是上面那個(gè)不行的話,你再試一試這個(gè),用masm5調(diào)試
.MODEL
.286
.CODE
ORG 100H
QUEEN: PUSH '$'
PUSH ' '
MOV BP,SP
LEA DX,[BP-08]
NEWL: MOV AH,'1'
NEWC: MOV CL,00
MOV SI,SP
ISOK: CMP SI,BP
JE SAVE
LODSB
SUB AL,AH
JZ NEXT
INC CX
CMP AL,CL
JE NEXT
ADD AL,CL
JZ NEXT
JMP ISOK
SAVE: PUSH AX
INC SP
CMP SP,DX
JNE NEWL
MOV AH,9
INT 21H
BACK: DEC SP
POP AX
NEXT: INC AH
CMP AH,'1'+08
JNE NEWC
CMP SP,BP
JNE BACK
INT 20H
END QUEEN
goon在匯編語言里是變量名,即變量的標(biāo)識(shí)符,可以由字符,數(shù)字,以及下劃線來組成。
變量名只能是字母(a-z A-Z),數(shù)字(0-9),下劃線(_)的組合,并且之間不能包含空格,數(shù)字不能放在變量名首位。
變量名不能使用編程語言的保留字。比如在javascript中不能使用true,false,while,case,break保留字等等。
擴(kuò)展資料
重要命名規(guī)則
在每個(gè)代碼范圍內(nèi)使用足夠短和足夠長(zhǎng)的名稱:例如循環(huán)計(jì)算器用一個(gè)字符就可以了,如i;條件和循環(huán)變量用一個(gè)單詞,方法名1-2個(gè)單詞,類名2-3個(gè)單詞,全局變量3-4個(gè)單詞組成
為變量指定一些專門名稱,不要使用例如 "value", "equals", "data" 這樣的變量名
變量名要使用有意義的名稱,通過變量名能大概反映出其具體的用途
不要在變量名前加前綴,例如 o_, obj_, m_ 之類
服從公司命名規(guī)范,在命名時(shí)使用一致的做法,例如:txtUserName, lblUserName, cmbSchoolType, ... 除非是大大降低了可讀性
服從編程語言本身的規(guī)范,不要使用不連貫的小寫和大寫混合名稱,例如:userName, UserName, USER_NAME, m_userName, username, ...
參考資料來源:百度百科-變量命名規(guī)則
它就是一種語言.
匯編語言(Assembly Language)是面向機(jī)器的程序設(shè)計(jì)語言。
在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(hào)(Symbol)或標(biāo)號(hào)(Label)代替地址媽。這樣用符號(hào)代替機(jī)器語盲的二進(jìn)制碼,就把機(jī)器語音變成了匯編語言。于是匯編語言亦稱為符號(hào)語言。
使用匯編語言編寫的程序,機(jī)器個(gè)能直接識(shí)別,要由一種程序?qū)R編語言翻譯成機(jī)器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統(tǒng)軟件中語言處理系統(tǒng)軟件。匯編語言把匯編程序翻譯成機(jī)器語言的過程稱為f匯編。
匯編語言比機(jī)器語言易于讀寫、易于調(diào)試和修改,同時(shí)也具有機(jī)器語言執(zhí)行速度快,占內(nèi)存空間少等優(yōu)點(diǎn),但在編寫復(fù)雜程序時(shí)具有明顯的局限性,匯編語言依賴于具體的機(jī)型,不能通用,也不能在不同機(jī)型之間移植。
■對(duì)于不同型號(hào)的計(jì)算機(jī),有著不同的結(jié)構(gòu)的匯編語言
匯編語言由于采用了助記符號(hào)來編寫程序,比用機(jī)器語言的二進(jìn)制代碼編程要方便些,在一定程度上簡(jiǎn)化了編程過程。匯編語言的特點(diǎn)是用符號(hào)代替了機(jī)器指令代碼,而且助記符與指令代碼一一對(duì)應(yīng),基本保留了機(jī)器語言的靈活性。使用匯編語言能面向機(jī)器并較好地發(fā)揮機(jī)器的特性,得到質(zhì)量較高的程序。
匯編語言是面向具體機(jī)型的,它離不開具體計(jì)算機(jī)的指令系統(tǒng),因此,對(duì)于不同型號(hào)的計(jì)算機(jī),有著不同的結(jié)構(gòu)的匯編語言,而且,對(duì)于同一問題所編制的匯編語言程序在不同種類的計(jì)算機(jī)間是互不相通的。
匯編語言中由于使用了助記符號(hào),用匯編語言編制的程序輸入計(jì)算機(jī),計(jì)算機(jī)不能象用機(jī)器語言編寫的程序一樣直接識(shí)別和執(zhí)行,必須通過預(yù)先放入計(jì)算機(jī)的"匯編程序"的加工和翻譯,才能變成能夠被計(jì)算機(jī)識(shí)別和處理的二進(jìn)制代碼程序。用匯編語言等非機(jī)器語言書寫好的符號(hào)程序稱為源程序,運(yùn)行時(shí)匯編程序要將源程序翻譯成目標(biāo)程序。目標(biāo)程序是機(jī)器語言程序,它一經(jīng)被安置在內(nèi)存的預(yù)定位置上,就能被計(jì)算機(jī)的CPU處理和執(zhí)行。
匯編語言像機(jī)器指令一樣,是硬件操作的控制信息,因而仍然是面向機(jī)器的語言,使用起來還是比較繁瑣費(fèi)時(shí),通用性也差。但是,匯編語言用來編制系統(tǒng)軟件和過程控制軟件,其目標(biāo)程序占用內(nèi)存空間少,運(yùn)行速度快,有著高級(jí)語言不可替代的用途。
《微機(jī)原理及匯編語言教程》
網(wǎng)頁標(biāo)題:匯編語言怎么定義go 匯編語言怎么定義字符串
網(wǎng)頁鏈接:http://www.rwnh.cn/article20/doohgjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、商城網(wǎng)站、品牌網(wǎng)站建設(shè)、用戶體驗(yàn)、網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)