匯編課程設計2寫入光碟
Ⅰ 匯編語言課程設計
堆方塊的那個游戲么?
Ⅱ 匯編語言課程設計求解
.modelsmall
.data
stuinfodb'XiaomingLi,Num.00001',0dh,0ah,'$'
msg0db'InputN(2<N<50):$'
msg1db0dh,0ah,'Inputisinvalid,reinput:$'
crlfdb0dh,0ah,'$'
Ndb0
.code
.startup
leadx,stuinfo
movah,9
int21h
leadx,msg0
int21h
movbl,10
r0:
movbh,0
r1:;readN
movah,1
int21h
cmpal,0dh
jzr2
cmpal,'0'
jbe0
cmpal,'9'
jae0
andal,0Fh
xchgal,N
mulbl
addN,al
incbh
cmpbh,2
jzr2
jmpr1
r2:
moval,N
cmpal,3
jbe0
cmpal,50
jaee0
movah,9
leadx,crlf
int21h
movbx,0
movax,2
c0:
addbx,ax
callprint
addax,2
cmpal,N
jac1
callprintplus
jmpc0
c1:
movax,0e3dh;'=':3dh
int10h
movax,bx
callprint
jmpexit
e0:
movah,9
leadx,msg1
int21h
movN,0
jmpr0
exit:
.exit0
printplusprocnear
pushax
movax,0e2bh;'+':2bh
int10h
popax
ret
printplusendp
printprocnear
pushax
pushbx
movbx,10
xorcx,cx
q0:
xordx,dx
divbx
xordx,0e30h
pushdx
inccx
cmpax,0
jnzq0
q1:
popax
int10h
loopq1
popbx
popax
ret
printendp
END
Ⅲ 王爽匯編課程設計2有不懂的地方。
mov bx,512
mov ax,offset boot_end-offset boot
mov dx,0
div bx
cmp ax,0 ;這里如果ax=0,是不是offset boot_end-offset boot還沒有512B呢?對頭,
je load_ok ;cmp ax,0後的load_ok是做什麼的? 標號,做跳轉的目標地址,load_ok表示本程序載入完成,可以繼續,功能是將把控制轉移到0:offset b_start-offset boot+7c00h
cmp dx,0 ;這里如果dx=0,是不是(ax,offset boot_end-offset boot )還沒有超過512B,沒余?否,如果沒有超過512B,就已經在前面跳走了!是無余,就是整除了,正好占整數個扇區
je r_floppy ;cmp dx,0後的r_floppy是做什麼的? 標號,做跳轉的目標地址,r_floppy就是read floppy負責將BIOS沒有載入完的部分載入完
inc ax
Ⅳ 匯編課程設計,用匯編編寫,求大神幫忙
;這題給5分,還不如不給呢
;這里我對stein演算法的實現,應該可以再優化一下.暫時這樣了.
;完了,答錯了,看成求最大公約數了,我改一下--改完了.
;所有公約數:
dsegsegment
m0db'Inputfirstnumber:$'
m1db'Inputsecondnumber:$'
rdb0dh,0ah,'$'
res1db0dh,0ah,'Thegreatestcommondivisorof$'
res2db'and$'
res3db'is$'
xdb0
ydb0
dsegends
assumecs:cseg,ds:dseg
csegsegment
start:
movax,dseg
movds,ax
movah,9
leadx,m0
int21h
leasi,x
callreadint
movah,9
leadx,r
int21h
movah,9
leadx,m1
int21h
leasi,y
callreadint
movah,9
leadx,r
int21h
movbl,2
movch,0
movcl,x
cmpcl,y
ja$0
movcl,y
$0:
moval,x
movah,0
divbl
cmpah,0;
jnz$1
moval,y
divbl
cmpah,0
jnz$1
moval,bl
callprint10
moval,20h
int10h
$1:
incbl
loop$0
movax,4c00h
int21h
print10procnear
pushbx
pushcx
movbx,10
movcx,0
p0:
xordx,dx
divbx
xordx,0e30h
pushdx
inccx
cmpax,0
jnzp0
p1:
popax
int10h
loopp1
popcx
popbx
ret
print10endp
;讀取10進制輸入數據(<100),saveto[si]
readintprocnear
movbx,10
r0:
movah,7;不回顯方式讀取一個字元
int21h
cmpal,0dh
jzr1;回車鍵結束輸入
cmpal,'0';輸入不是數字的字元,重新輸入
jbr0
cmpal,'9'
jar0
movah,0eh;輸入合法,將字元輸出到屏幕上
int10h
andal,0fh
xchgal,[si]
mulbl
addal,[si]
mov[si],al;保存到[si]
cmpal,10;al>0說明是2位數了,再輸出一個數就會>100,
;所以此時可以結束輸入了
jbr0;輸入下一個數字
r1:
ret
readintendp
csegends
endstart;最大公約數.
dsegsegment
m0db'Inputfirstnumber:$'
m1db'Inputsecondnumber:$'
rdb0dh,0ah,'$'
res1db0dh,0ah,'Thegreatestcommondivisorof$'
res2db'and$'
res3db'is$'
xdb0
ydb0
dsegends
assumecs:cseg,ds:dseg
csegsegment
start:
movax,dseg
movds,ax
movah,9
leadx,m0
int21h
leasi,x
callreadint
movah,9
leadx,r
int21h
movah,9
leadx,m1
int21h
leasi,y
callreadint
movah,9
leadx,res1
int21h
movah,0
moval,x
callprint10
movah,9
leadx,res2
int21h
movah,0
moval,y
callprint10
movah,9
leadx,res3
int21h
moval,x
movbl,y
callstein
movah,0
callprint10
movax,4c00h
int21h
print10procnear
movbx,10
movcx,0
p0:
xordx,dx
divbx
xordx,0e30h
pushdx
inccx
cmpax,0
jnzp0
p1:
popax
int10h
loopp1
ret
print10endp
;Stein演算法求最大公約數,具體演算法自行查資料
;參數:al,bl
;返回值在al中
steinprocnear
movcl,1
s0:
cmpal,0
jzs1
cmpbl,0
jzs2
testal,1;偶數?
jnzs3
testbl,1;偶數?
jnzs4
shral,1
shrbl,1
shlcl,1
jmps0
s4:
shral,1
jmps0
s3:
testbl,1
jnzs5
shrbl,1
jmps0
s5:
cmpal,bl
jas6
movch,al
jmps7
s6:
movch,bl
s7:
cmpal,bl
jas8
subal,bl
negal
movbl,ch
jmps0
s8:
subal,bl
movbl,ch
jmps0
s1:
moval,bl
mulcl
jmps9
s2:
mulcl
s9:
ret
steinendp
;讀取10進制輸入數據(<100),saveto[si]
readintprocnear
movbx,10
r0:
movah,7;不回顯方式讀取一個字元
int21h
cmpal,0dh
jzr1;回車鍵結束輸入
cmpal,'0';輸入不是數字的字元,重新輸入
jbr0
cmpal,'9'
jar0
movah,0eh;輸入合法,將字元輸出到屏幕上
int10h
andal,0fh
xchgal,[si]
mulbl
addal,[si]
mov[si],al;保存到[si]
cmpal,10;al>0說明是2位數了,再輸出一個數就會>100,
;所以此時可以結束輸入了
jbr0;輸入下一個數字
r1:
ret
readintendp
csegends
endstart
Ⅳ 王爽匯編語言課程設計2實驗環境具體怎麼弄,還有程序設計好後是直接在DOS下運行還是在軟盤下
其實很簡單:下載一個masm6.15的壓縮文件(直接在網路主頁里搜「masm6.15下載」),大概4.32M,下載後,解壓縮到D:盤,將文件夾的名字改為masm,這是因為解壓後的名字默認為masm 615,中間有個空格不太好(因為再DOS下對於有空格的文件夾的名字要用雙引號括起來,比較麻煩)。
1、用記事本或其他文本編輯器(例如Editplus)寫好匯編程序,保存為.asm格式的文件(直接將後綴名修改為.asm),例如文件名為test.asm,放到D:盤。
2、在windows下點擊「開始」,再點擊「運行」,在編輯框中輸入cmd,切換到DOS界面下。進入D:盤——d:,再回車。
3、在當前目錄(D:盤下)用cd命令,切換到剛才解壓到D:盤的masm目錄下的BIN目錄下——
cd masm\bin
4、 然後生產目標文件,使用命令——masm D:\test.asm(後綴名可以省略,默認為.asm),生成.obj的目標文件,該目標文件在D:\masm\BIN目錄下。將生成的.obj文件拷貝到D:盤根目錄下(其實不用拷貝也行,只要下面能找到該.obj文件就行,個人建議將.obj文件和.asm文件放到一起比較清楚)。
5、再使用命令將.obj目標文件鏈接成.exe文件(還在D:\masm\BIN目錄下使用命令)——
link D:\test.obj(後綴名可以省略,默認為.obj),出現選項讓你選,第一個選項是讓你輸入生成的.exe文件的名字,例如輸入——D:\test.exe(後綴名可以省略,默認為.exe),其他選項暫時可以不考慮(其實看他們的名字就能看懂)。這樣就在D:盤下生成了一個test.exe的可執行文件。
6、雙擊該文件,發現屏幕閃了一下就沒了,說明程序是運行了。要想看到程序每一步的執行情況,那麼生成的test.exe文件要在Debug模式下運行。在DOS界面下(任何目錄)輸入命令——debug D:\test.exe(此時後綴名.exe必須要有),回車後就開始運行該可執行文件了。按照王爽那本書上從第91頁開始的程序執行過程的跟蹤使用的一些命令,例如:r命令、u命令、d命令、g命令、p命令等的使用,就能查看和控製程序的運行了。
Ⅵ 匯編語言課程設計題目
命令行參數編程:
還需要什麼提示呢
Ⅶ 匯編 王爽 課程設計2 設置時間時就是寫不進去 是不是虛擬機設置問題
不是,那部分內存是只讀的,出廠設定的,所以無法更改
Ⅷ 寫一個匯編的程序。課程設計用的
這個用匯編語言實現有點麻煩,如果用Verilog實現,我可以給你源代碼。
Ⅸ 為什麼《匯編語言》(王爽)課程設計2要求編寫的程序必須安裝在軟盤
那個課程設計沒做,必須要實模式才行,涉及到真實硬體,虛擬8086貌似不行,所以乾脆沒做。但是安裝在軟盤的原因是因為軟盤的結構比現在的硬碟簡單多了,這就跟現在的cpu跟以前的8086一樣,現在的cpu肯定要復雜的多,所以我們學習的話還是用簡單的東西來學,譬如8086cpu和軟盤都是以前的東西,相對簡單
Ⅹ 匯編課程設計
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -----------------------------------------
; 功能:顯示指定地址(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
; -----------------------------------------
; 功能:輸出一個字元
; 入口:dl=要顯示的字元
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; -----------------------------------------
; 功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
; 入口:AX=二進制數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -----------------------------------------
; 功能:將AL中的低4位二進制數轉換成十六進制顯示的ASCII碼
; 入口:AL
; 出口:AL=轉換後的ASCII碼
AL_ASCII Proc Near
cmp al,10 ;AL<10?
jb @@To_ASCII ;AL<10,按數字處理
add al,7 ;AL>=10,按大寫字母處理
@@To_ASCII: add al,'0' ;轉換成相應的數字或大寫字母
ret
AL_ASCII EndP
; -----------------------------------------
; 功能:將AL中的位元組數據轉換成十六進制顯示的ASCII碼
; 入口:AL
; 出口:AX=轉換後的ASCII碼
Byte_ASCII Proc Near
push cx
mov cx,4
xor ah,ah ;將AH置0
shl ax,cl ;將AX左移4位
shr al,cl ;將AL右移4位
xchg ah,al
call AL_ASCII ;調用子程序,將AL中的值轉換成相應的ASCII碼
xchg ah,al
call AL_ASCII
xchg ah,al
pop cx
ret
Byte_ASCII EndP
; -----------------------------------------
; 功能:將AL中的位元組數據轉換成十六進制顯示的ASCII碼,並在當前游標位置顯示
; 入口:AL
; 出口:AX=轉換後的ASCII碼
ByteD_ASCII Proc Near
push dx
push ax
call Byte_ASCII ;將AL中的位元組數轉換成十六進制顯示的ASCII碼
mov dl,al
call Output_Chr ;顯示一個字元
mov dl,ah
call Output_Chr ;顯示一個字元
mov dl,'H'
call Output_Chr ;顯示一個字元
pop ax
pop dx
ret
ByteD_ASCII EndP
; -----------------------------------------
Clear_Crt proc Near ;清屏
mov ax,700h
mov bh,Attribute ;取字元屬性
xor cx,cx ;左上角坐標
mov dh,24 ;右下角行號
mov dl,79 ;右下角列號
int 10h
ret
Clear_Crt Endp
; -----------------------------------------
; 顯示乘法口訣表
Multiply Proc Near
mov al,1 ;外循環初值
Multiply_1: mov ah,1 ;內循環初值
Multiply_2: push ax
mov dl,ah
or dl,30h ;轉換成可顯示的ASCII碼
call Output_Chr ;顯示被乘數
mov dl,'X'
call Output_Chr ;顯示乘號
mov dl,al
or dl,30h ;轉換成可顯示的ASCII碼
call Output_Chr ;顯示乘數
mov dl,'='
call Output_Chr ;顯示等號
mul ah ;乘法
call Dec_ASCII ;顯示乘積
mov dl,20h
call Output_Chr ;顯示一個空格
pop ax
inc ah ;被乘數增1
cmp ah,al
jbe Multiply_2 ;下一個乘法
call Output_CTLF ;輸出一個回車、換行
inc al ;乘數增1
cmp al,10
jb Multiply_1
ret
Multiply EndP
; -----------------------------------------
; 顯示ASCII碼表(從20H--FFH)
ASCII_Code Proc Near
call Clear_Crt ;清屏
xor dx,dx
inc dh
xor bx,bx
mov ah,2
int 10h
mov dl,20h
Disp_Line: mov cx,11 ;每行顯示11個ASCII碼字元
List_ASCII: push dx
mov al,dl
call ByteD_ASCII ;將AL中的位元組數據轉換成十六進制顯示的ASCII碼,並在當前游標位置顯示
mov dl,20h
call Output_Chr ;顯示一個空格
pop dx
call Output_Chr ;顯示ASCII碼字元
push dx
mov dl,20h
call Output_Chr ;顯示一個空格
mov dl,20h
call Output_Chr ;顯示一個空格
pop dx
inc dl ;下一個ASCII碼字元
test dl,0ffh
jz $+9
loop List_ASCII
call Output_CTLF ;輸出一個回車、換行
jmp Disp_Line
call Output_CTLF ;輸出一個回車、換行
ret
ASCII_Code EndP
; -----------------------------------------
Attribute db ? ;字元屬性
prompt_Str db 'Press any key to continue...$'
Select db 'M. 9-9 Multiply table',13,10
db 'A. ASCII code',13,10
db 'Q. Quit',13,10,13,10
db 'Please select: $'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
mov ah,8
xor bh,bh
int 10h
mov Attribute,ah ;保存字元屬性
Select_Item:xor dx,dx
xor bx,bx
mov ah,2
int 10h
Output Select ;提示輸入選擇項目
mov ah,1
int 21h
call Output_CTLF ;輸出一個回車、換行
call Output_CTLF ;輸出一個回車、換行
and al,0dfh
cmp al,'Q'
jz Exit_Proc ;結束程序,返回操作系統
cmp al,'M'
jnz $+7
call Multiply; 顯示乘法口訣表
jmp Scroll_Down
cmp al,'A'
jnz Select_Item
call ASCII_Code; 顯示ASCII碼表(從20H--FFH)
Scroll_Down:call Output_CTLF ;輸出一個回車、換行
Output prompt_Str
mov ah,1
int 21h
call Clear_Crt ;清屏
jmp Select_Item
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Code ENDS
END Start ;編譯到此結束