由鍵盤輸入一串整數(length <= 9),將該串轉換為整數,並分別按16進製制和10進製輸出。
整數的長度為9,這樣就超過了16位,單純用8086的運算已經不能滿足,加法的進製就會丟失,
而乘除法很可能會出現overflow.
所以要用到32位暫存器,這樣就用到386指令.
如果不用386指令,也可以用兩個暫存器對高16位和低16位分別進行操作.
下面是用386指令的源**
enter macro
mov dl,0ah
mov ah,2h
int 21h
mov dl,0dh
mov ah,2h
int 21h
endm
.model hex
.386
.data
msg db 'input numbers (length<=9):$'
.stack
db 100 dup(?)
.code
main proc far
;*********************************
start:
push ds
mov ax,0
push ax
mov ax,@data
mov ds,ax
mov dx,offset msg
mov ah,9
int 21h
call rec
enter
call tohex
enter
call dec1
enter
ret
main endp
;-----------------------------------
rec proc near ;子程式rec是用來接收乙個長度小於9的整數
mov ebx,0 ;並把它放入ebx中
newnum:
mov ah,01
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbwxchg eax,ebx
mov ecx,10d
mul ecx
xchg eax,ebx
add ebx,eax
jmp newnum
exit:
retrec endp
;------------------------------------
tohex proc near ;子程式tohex是把ebx中的數用16進製輸出
mov ch,8
rotate:
mov cl,4
rol ebx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl print
add al,7h
print:
mov dl,al
mov ah,2h
int 21h
dec ch
jnz rotate
rettohex endp
;----------------------------------
dec1 proc near ;dec1是轉化為十進位制輸出
mov ecx,100000000d
call todec
mov ecx,10000000d
call todec
mov ecx,1000000d
call todec
mov ecx,100000d
call todec
mov ecx,10000d
call todec
mov ecx,1000d
call todec
mov ecx,100d
call todec
mov ecx,10d
call todec
mov ecx,1d
call todec
ret
;--------------------------------
todec proc near
mov eax,ebx
mov edx,0
div ecx
mov ebx,edx
mov dx,ax
add dl,30h
mov ah,02h
int 21h
rettodec endp
dec1 endp
;----------------------------
end main
第二次作業
execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...
第二次作業
第一題 p1 1 遞迴寫法,效率低 include 1.寫乙個函式返回引數值為1的個數 比如 15 0000 1111 4個1 程式原型 int count one bits unsigned int value int fuc int x else return 0 void mainp1 p1 ...
第二次作業
檔名稱 516.cpp 作 者 闕文榮 完成日期 2016 年 3 月 11 日 版 本 號 v1.1 對任務及求解方法的描述部分 用while語句控制輸出 輸入描述 略 問題描述 現在北京有一套房子,200萬,假設房價每年 10 乙個軟體工程師每年固定能賺40萬。他想買這套房子,多大的 率能夠忍受...