微機原理
1陣列straing中存放著多個8位有符號數,以「$」結束,要求分成正陣列和負陣列分別存放,並統計兩個陣列的個數,分別存於正、負陣列的第乙個位元組
data segment
dat1 db 12h,0f3h,38h,32h,0e6h,67h,0d9h,"$"
buf1 db 10 dup(00h)
buf2 db 10 dup(00h)
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset dat1
mov di,offset buf1+1
mov bx,offset buf2+1
mov cx,0
lop1:
lodsb
cmp al,'$'
je lop3
test al,80h
jnz fushu
stosb
inc cl
jmp lop2
fushu:
xchg bx,di
stosb
inc ch
xchg bx,di
lop2:
jmp lop1
lop3:
mov di,offset buf1
mov [di],cl
mov bx,offset buf2
mov [bx],ch
ends
end start
2將資料塊dat1中的20個單位元組數,複製到dat2中,並從中檢索與2eh相同的數,將此單元的數換成空格符。如有多個與2eh相同的數,要求統計出個數,存在暫存器dl中
data segment
dat1 db 12h,2eh,0f3h,2eh,38h,2eh,32h,2eh,0e6h,67h,12h,2eh,0f3h,2eh,38h,2eh,32h,2eh,0e6h,67h
kong db 00h,00h
dat2 db 20 dup(00h)
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset dat1
mov di,offset dat2
cldmov cx,20
rep movsb
mov si,offset dat2
cldmov cx,20
mov bh,2eh
lop:
lodsb
cmp al,bh
jne done
inc bl
mov [si-1],0ffh ;以0ffh代替2eh
done:loop lop
wan:
mov dl,bl
ends
end start
3將變數var1中的16位二進位制數取反,並統計原數中1的個數,將個數存在變數var2中
data segment
var1 dw 54d3h
kong db 00h,00h
var2 db 00h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset var2
mov di,offset var1
mov ax,[di]
mov bx,[di]
not bx
mov [di],bx
mov bl,0
mov cx,16
lop1:
sal ax,1
jnc lop2
inc bl
lop2:
loop lop1
mov [si],bl
ends
end start
4找出資料塊dat1中的15個8位有符號數中,最大的偶數和最小的奇數,分別存在變數max和min中
data segment
dat1 db 31h,0e6h,78h,45h,62h,89h,31h,08h,42h,0d5h,8eh,56h,03h,22h,37h
kong db 00h,00h
max db 00h
min db 00h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset dat1
mov di,offset max
mov bx,offset min
mov cx,15
lop1:
lodsb
test al,01h
jnz jishu
cmp [di],al
jge lop2
mov [di],al
jmp lop2
jishu:
cmp al,[bx]
jge lop2
mov [bx],al
lop2:
loop lop1
ends
endstart5將變數var1中的16位二進位制數,變成4個ascⅱ碼,存在var2開始的4記憶體單元中
data segment
var1 dw 238dh
kong db 00h,00h
var2 db 4 dup(00h)
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset var1
mov di,offset var2
mov bx,[si]
mov al,bl
call htoasc
mov [di],al
shr bl,4
mov al,bl
call htoasc
mov [di+1],al
mov al,bh
call htoasc
mov [di+2],al
shr bh,4
mov al,bh
call htoasc
mov [di+3],al
hlthtoasc proc
and al,0fh ;只取dl的低4位
or al,30h ;dl高4位變成3
cmp al,39h ;是0~9,還是0ah~0fh ?
jbe htoend ;是0~9,轉移
add al,7 ;是0ah~0fh,加上7
htoend: ret ;子程式返回
htoasc endp
ends
end start6將資料塊dat1中的多個8位有符號數,資料塊以0結尾(資料塊不包括0),按照從小到大的順序排列
data segment
dat1 db 37h,18h,72h,0e6h,34h,0c5h,0a9h,45h,82h,19h,00h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset dat1
mov cx,0
mov dx,0
jishu: ;由於編譯器無法識別length
lodsb ;這裡先計算資料塊長度
cmp al,00h
je bijiao
inc cx
jmp jishu
bijiao: ;冒泡法排序_by liushuo
dec cx
mov dx,cx
lop1:
mov si,offset dat1
lop2: ;內迴圈
mov al,[si]
mov ah,[si+1]
inc si
cmp al,ah
jle do
mov [si-1],ah
mov [si],al
do:loop lop2
mov cx,dx
dec dx
wan:
loop lop1
ends
end start7記憶體單元x中有乙個8位有符號數,按下式計算y值,並將y值存於其後的單元(注意資料的大小data segment
x db 12
y db 00h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset x
mov di,offset y
mov bl,2
mov bh,5
mov al,[si]
cmp al,00h
jg da
cmp al,00h
jl xiao
mov ah,00h
mov [di],ah
jmp en
da:imul bh
sub al,30
mov [di],al
jmp en
xiao:
imul bl
add al,25
mov [di],al
jmp en
enends
end start8陣列buf1中有10個bcd碼,求出其累加和及平均值,分別存在變數sum和**er中data segment
buf1 db 12h,38h,44h,81h,57h,49h,23h,38h,11h,92h
sum dw 0
**er dw 0
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset buf1
mov di,offset sum
mov ax,0
mov cx,10
mov al,[di]
lop1:
mov bl,[si]
inc si
add al,bl
daajnc lop2
inc ah
lop2:
loop lop1
mov [di],ax
shr ax,4
mov di,offset **er
mov [di],ax
ends
end start9資料塊x中有8個8位無符號數,分別為記為x1、x2、….. x8,試計算y=x1+x2+x3-x4-x5+x6-x7+x8的值,並存在記憶體中
data segment
dat db 2,5,3,2,5,6,7,4
y db 00h,00h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov si,offset dat
mov di,offset y
mov al,[si]
add al,[si+1]
adc al,[si+2]
sub al,[si+3]
sbb al,[si+4]
add al,[si+5]
sub al,[si+6]
add al,[si+7]
mov [di],al
ends
end start
10利用呼叫子程式的方法,將不大於9999的乙個16位二進位制數轉換成十進位制數,以組合bcd碼的形式存在2個記憶體單元中
data segment
dat dw 3587
res db 00h,00h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
main proc near
mov ax, data
mov ds, ax
mov es, ax
mov si,offset dat
mov di,offset res
mov ax,[si]
call htobcd
mov [di],cl
mov [di+1],ch
hltmain endp
htobcd proc near ;轉換子程式
push bx ;傳入引數ax中儲存16位二制數
push cx ;傳出引數ax中儲存轉換後的組合bcd碼
push dx
mov dx,0
mov bx,1000
cmp ax,bx
jge qian
lop1:
mov bx,100
mov dx,0
cmp ax,bx
jge bai
lop2:
mov bx,10
mov dx,0
cmp ax,bx
jge shi
lop3:
shl cl,4
and al,0fh
or cl ,al
jmp done
qian:
idiv bx
mov ch,al
mov ax,dx
jmp lop1
bai:
idiv bx
shl ch,4
and al,0fh
or ch ,al
mov ax,dx
jmp lop2
shi:
idiv bx
mov cl,al
mov ax,dx
jmp lop3
done:
mov ax,cx
pop dx
pop cx
pop bx
rethtobcd endp
ends
end start
匯程式設計序小例項
mov ah,01h系統呼叫輸入乙個字元用於功能選擇 int 21h字元預設輸入到al中 endm 巨集定義字元輸出 charout macro outchar巨集定義將字元outchar輸出 push ax push dx mov dl,outchar mov ah,02h系統呼叫輸出字元outc...
實驗匯程式設計序除錯和簡單介面程式設計
實驗報告 課程名稱微機介面與組合語言 實驗專案實驗一 匯程式設計序除錯和簡單介面程式設計 實驗儀器 tpc usb通用微機介面實驗系統 系別 計算機學院 專業網路工程 班級 學號 網工1班 2011011303 學生姓名 靳曉穎 實驗日期 2013 11 19 成績指導教師 王欣 一 實驗目的 1....
崗位職責及許可權匯程式設計序
1.0 目的 明確公司各部門和崗位的設定,並規定各部門和崗位的職責和許可權。2.0 適用範圍 適用於公司所有崗位的管理。4.0 職責與許可權 4.1總經理負責建立與質量管理體系相適應的組織結構,明確其職責 許可權及相互關係,任免部門經理或負責人。5.0 程式內容 5.3 崗位設定及能力要求 詳細要求...