編譯環境:emu8086
附:彙編常用跳轉指令及其檢測位
ax 存放當前學生的成績
bx 存放當前學生在陣列中的相對位址指標
cx 內迴圈計數器
dx 存放當前學生的名次(遍歷到一名成績更高的學生則名次向後+1)
si 在內迴圈中存放其他學生的相對位址指標
di 外迴圈計數器
datas segment
grade dw 88,75
,95,63
,98,78
,87,73
,90,60
rank dw 10
dup(0)
datas ends
codes segment
assume cs:codes,ds:datas,es:datas
start:
mov ax,datas ;標準開局
mov ds,ax
mov es,ax
mov di,
10;外迴圈計數
mov bx,
0;當前學生的相對位址指標置0
outloop:
mov ax,grade[bx]
;取出一名學生的成績到ax中
mov dx,
0;將該學生名次置0
mov cx,
10;置內迴圈計數為10,將該學生的成績與陣列中所有成績都比較一遍,總共10次(包括與自身進行比較)
lea si,grade ;取得成績陣列的首位址
next:
cmp ax,
[si]
;注意:此處si儲存的是位址,要比較值,所以要[si]
jg no_count ;jump when greater,若當前學生的成績比[si]大,則名次保持不變
inc dx ;否則將名次+
1(和自身比較時也會+
1,因此置0是必要的)
no_count:
add si,
2;向後偏移2個位址(
1個字word=
2個位元組byte),取出下一位學生的成績與該學生進行比較
loop next ;繼續比較,此處使用cx作為內迴圈計數器
mov rank[bx]
,dx ;
10次迴圈過後,已經將該學生的成績確定,因此將dx中的值(名次)儲存到rank陣列中的對應位置
add bx,
2;開始下一輪比較
dec di ;外迴圈次數-
1 jne outloop ;若外迴圈次數[di]不為0,則繼續外迴圈
mov ah,
4ch int
21hcodes ends
end start
每乙個學生都和陣列中的學生比較了10次,10x10=100,複雜度n2 ,還湊合吧
**雖短,但也應該要想著優化
學習成績排名
create talbe score 姓名 varchar 14 科目 varchar 14 分數 int insert into score select 張三 數學 85 union all select 張三 語文 90 union all select 張三 英語 88 union all ...
彙編學習筆記
1 cpu的指令集 cpu內整合了不同功能的電路模組 如 加 減法器,比較器 正常工作所對應的不同高低電平 數電知識 組合語言是人對機器指令的語言表述。2 cpu對硬體的控制實際是訪問其記憶體 如顯示卡上整合有ram 視訊記憶體 和rom 裝有唯讀bios 源 被編譯成機器 後被載入記憶體。3 程式...
彙編學習筆記
彙編檔案為 s 檔案 因為c程式執行需要棧,設定好棧了之後就可以呼叫c程式了 bl delay 呼叫delay 暫存器移位 mov r0,r1,lsl 3 r1內容左移3位送r0 暫存器間接定址 ldr r1,r2 r2做位址取數送r1 基址變址定址 ldr r1,r2,4 r2 4作位址取數送r1...