練習二;將乙個字單元中的二進位制數以十六進製制數形式顯示在螢幕上
● 乙個字單元有4個十六進製制數,要將這些十六進製制數按順序顯示,則需要用迴圈移位方法把所要顯示的4位二進位制數移動到最右面,既分離出每個4位,對分離出每個4位(一位十六進製制數)進行轉換
● 0——9的ascii為30h----39ha,a---f的ascii為41h---46h
程式**
data segment
buff dw 3c6dh
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
lea si,buff
mov bx,[si] ;從記憶體單元取運算元 y
mov cx,0404h
a1: rol bx,cl ;迴圈右移
mov al,bl
and al,0fh ;分離要轉換的四位二進位制數 n
add al,30h
cmp al,3ah
jl a2 y
add al,7h ;字元為a—f,要加7,變成其ascii碼
a2: mov dl,al 顯示十六進製制數
mov ah,2
int 21h
dec ch
jnz a1
mov ah,4ch
int 21h
code ends
end start
習題3: 求1~100整數的和。
程式**:
stack segment stack
dw 128 dup(?)
stack ends
data segment
s db 4 dup(?)
data ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov bx,1
mov ax,0
mov cx,100 ;計數100
next: add ax,bx
inc bx
loop next ; next完成從1加到100
mov dl,0 ; 計數,為千位的值
lp1: cmp ax,3e8h ; 判和大於1000否
jb lp2 ; no,轉lp2
inc dl ; yes, dl加1(計數有幾個1000)
sub ax,3e8h ;和中只要大於1000則減1000
jmp lp1 ; 返回lp1,再判剩餘的數是否大於1000
lp2: mov s+3,dl ; 儲存千位數
mov dl,0 ; dl清0,再計數,為百位的值
lp3: cmp ax,64h ; 判剩餘的數大於100否
jb lp4 ; no,轉lp4
inc dl ; yes, dl加1
sub ax,64h ; 每次判斷剩餘的數大於100則減100
jmp lp3 ; 返回lp3,再判剩餘的數是否大於100
lp4: mov s+2,dl ; 儲存百位數
mov dl,0 ; 計數,為十位的值
lp5: cmp ax,0ah ; 判剩餘的數大於10否
jb lp6 ; no,轉移
inc dl ; yes, dl加1
sub ax,0ah ; 每次判斷剩餘的數大於10則減10
jmp lp5 ; 返回lp5,再判剩餘的數是否大於10
lp6: mov s+1,dl ; 儲存十位數
mov s,al ; 儲存個位數
mov si,offset s+3 ; 將s+3的位址送si中
mov cx,4 ; 顯示4位計數
xs: mov dl,[si
add dl,30h
mov ah,2
int 21h
dec si
loop xs
mov ah,4ch
int 21h
code ends
end start
程式運算後,要將千,百,十,個位分離,分離的方法既:將和先判斷大於1000否,大於1000則減1000,並且用dl暫存器計數加1,直到剩餘的數小於1000為止,則dl的內容為千位數的值。
類似再求出百位、十位,最後剩餘的數則是個位。
千,百,十,個位分離後,分別放在s+3,s+2,s+1,s(以位元組為單位)單元中。
習題四。 字串變數string以**o結束,求這個字串長度。字串變數string中存放「a string for testing o」。
程式**:
data segment
string db 'a string for testing o'
leng db 0
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov ax,0
mov dx,ax ;dx清零,用以存放統計字元個數
lea di,string ;變數的首位址(偏移量)送di
mov cx,100 ;迴圈次數100送cx中
mov al,'o'
lp: cmp al,[di]
je done ;若為「0」,既為結束標誌,轉done
inc dx ;不為「0」,(dx)+1
inc di
loop lp
done: mov leng,dl ;統計個數送變數leng中儲存
add dl,30h
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
彙編實驗三
實驗學時 2 實驗地點 二綜實驗日期 2014 11 3 一 實驗目的 掌握彙編程式設計規範,熟悉程式設計環境。二 實驗內容 1 編寫子程式把字串中的小寫字母轉變為大寫字母 參見教材實驗11 2 編寫0號中斷處理程式,使得在除法溢位發生時在螢幕中間顯示 divide error 參見教材實驗12 請...
彙編實驗報告
組合語言與微機接 術實驗報告 一分支程式設計 二迴圈程式設計 學號 1120102118 姓名 馬婧婷 班級 08311001 完成日期 2013 04 18 實驗1.1 一實驗背景 1 實驗目的 掌握組織及除錯乙個簡單並完整的組合語言程式,熟悉組合語言上機過程。實驗的第乙個程式是分支設計程式。2 ...
彙編實驗報告
課程編號 b080103020 組合語言程式設計 實驗報告 東北大學軟體學院 實驗1 資料傳送指令 實驗目的 了解和掌握 mov push pop xchg四條指令的作用和在程式設計中的用法。實驗內容 採用立即數定址方式將19e0h,3f56h,0af37h,9a81h分別送給eax ebx ecx...