分享
 
 
 

北京自考北大上机汇编语言知识点总结(二)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

;输出字符串函数

prompt proc

mov ah, 09h

int 21h

ret

prompt endp

;输出回车换行符函数

crlf proc

mov dl, 0dh

mov ah, 2

int 21h

mov dl, 0ah

mov ah, 2

int 21h

ret

crlf endp

;输出空格符函数

blank proc

mov dl, 20h

mov ah, 2

int 21h

ret

blank endp

;二进制的输入函数

;输入范围0~1111111111111111

inb proc

push cx

inbstart:

mov bx, 0

accept:

mov ah, 1

int 21h

cmp al, 0dh

je inbexit

cmp al, 30h

jl inberr

cmp al, 31h

ja inberr

sub al, 30h

mov ah, 0

mov ax, bx

mov cx, 2

mul cx

add bx, ax

jmp accept

inbexit:

pop cx

ret

inberr:

lea dx, 'bad format...$'

call prompt

jmp inbstart

inb endp

;八进制的输入函数

;范围:0-177777

inq proc

push cx

pop cx

ret

inq endp

;十进制的输入函数

;范围:0-65535

ind proc

push cx

indstart:

mov bx, 0

accept:

mov ah, 1

int 21h

cmp al, 0dh

je indexit

cmp al, 30h

jl inderr

cmp al, 39h

ja inderr

sub al, 30h

mov ah, 0

xchg ax, bx

mov cx, 10

mul cx

add bx, ax

jmp accept

indexit:

pop cx

ret

inderr:

mov dx, offset 'bad format...$'

call prompt

jmp indstart

ind endp

;十六进制的输入函数

;范围:0-0FFFFH

inh proc

push cx

inhstart:

mov bx, 0

accept:

mov ah, 1

int 21h

cmp al, 0dh

je inhexit

cmp al, 30h

jl inherr

cmp al, 66h ;'f'

ja inherr

cmp al, 39h ;'9'

jl num

cmp al, 41h ;'A'

jl inherr

cmp al, 46h ;'F'

ja lowercase

sub al, 7h ;'A'-':'=7h

jmp num

lowercase:

cmp al, 61h ;'a'

jl inherr

cmp al, 66h ;'f'

ja inherr

sub al, 27h ;'a'-':'=27h

num:

and ax, 0fh

xchg ax, bx

mov cx, 16 ;mov cx, 4

mul cx ;shl ax

add bx, ax

jmp accept

inhexit:

pop cx

ret

inherr:

lea dx, 'bad format...$'

call prompt

jmp inhstart

inh endp

;二进制的输出函数

;范围:0-1111111111111111

;call: 要输出的数字放在bx中传入

outb proc

push cx

mov nozero, 0 ;like a boolean variable

mov cl, 16

nextbit:

mov dl, 0

test bx, 8000h

je disp

mov nozero, 1

mov dl, 1

disp:

cmp nozero, 0

je continue

add dl, 30h

mov ah, 2

int 21h

continue:

shl bx, 1

loop nextbit

cmp nozero, 0

jne outbexit

mov dl, 30h ;output '0' because the number in bx is zero

mov ah, 2

int 21h

outbexit:

pop cx

ret

outb endp

;八进制的输出函数

;范围:0-177777

;call: 要输出的数字放在bx中传入

;十进制的输出函数

;范围:0-65535

;call: 要输出的数字放在bx中传入

outd proc

push cx

mov nozero, 0 ;like a boolean variable

mov cx, 10000

call decdiv

mov cx, 1000

call decdiv

mov cx, 100

call decdiv

mov cx, 10

call decdiv

mov cx, 1

call decdiv

cmp nozero, 0

jne outdexit

mov dl, 30h

mov ah, 2

int 21h

outdexit:

pop cx

ret

;---sub proc---

;call: 被除数在bx传入,除数在cx传入

;ret: 打印商,余数送bx

decdiv proc

mov ax, bx

mov dx, 0

div cx

mov bx, dx

mov dl, al

cmp dl, 0

jne dispdigit

cmp nozero, 0

jne dispdigit

jmp decdivexit

dispdigit:

mov nozero, 1

add dl, 30h

mov ah, 2

int 21h

decdivexit:

ret

decdiv endp

;---sub proc---

outd endp

;十六进制的输出函数

;范围:0-0FFFFH(或0-0ffffh)

;输出十六进制用大写字母(A-F表示)

;call: 要输出的数字放在bx中传入

outh proc

push cx

mov ch, 4

mov nozero, 0 ;like a boolean variable

next4bits:

mov cl, 4

rol bx, cl

mov al, bl

and al, 0fh

cmp al, 10

jl dispdigit

add al, 7h ;if disp 'a-f' ,should add 27h

dispdigit:

cmp al, 0

jne dispnozero

cmp nozero, 0

je continue

dispnozero:

mov nozero, 1

add al, 30h

mov dl, al

mov ah, 2

int 21h

continue:

dec ch

jnz next4bits

cmp nozero, 0

jne outhexit

mov dl, 30h

mov ah, 2

int 21h

outhexit:

pop cx

ret

outh endp

;冒泡排序函数(降序)(sort in DW array<2 bytes>)

bubble proc

push cx

mov cx, count ;NOTICE: count = nums.length-1

outloop:

mov di, cx

mov si, 0

inloop:

mov ax, nums[si]

cmp ax, nums[si+2] ;nums[si+1], if sort in 8 byte

jae incontinue

xchg ax, nums[si+2] ;nums[si+1], if sort in 8 byte

xchg ax, nums[si]

incontinue:

add si, 2 ;add si, 1, if sort in 8 byte

loop inloop

mov cx, di

loop outloop

pop cx

ret

bubble endp

;查找最小ASCII码

;call: 被查找ASCII串码放在buff中

;ret: 找到的最小ASCII码将被放在minascii中返回

getmin proc

push cx

lea si, buff+2

mov cl, num+1

and cx, 0fh

mov bl, [si]

next:

inc si

cmp bl, [si]

jle continue

mov bl, [si]

continue:

loop next

mov minascii, bl

pop cx

ret

getmin endp

;统计非字符和非数字的个数

;call: 被统计ASCII串码放在buff中

;ret: 统计的数字将被放在sum中返回

count proc

push cx

mov cl, buff+1

lea si, buff+2

mov sum, 0

next:

mov al, [si]

cmp al, '0' ;30h

jb yes

cmp al, '9' ;39h

jb no

cmp al, 'A' ;41h

jb yes

cmp al, 'Z' ;5ah

jb no

cmp al, 'a' ;61h

jb yes

cmp al, 'z' ;7ah

jb no

jmp yes

yes:

inc byte ptr sum

no:

inc si

loop next

pop cx

ret

count endp

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有