|
主题 : : 大家来写程序 [待解决] |
回复[ 4次 ]
点击[ 317次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-06-27 22:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-19 11:52 |
统计数组"this is a c program"中字符"a"的个数,用子程序实现.. | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-06-28 11:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
呵呵
很简单啊,在c语言中不过是一个for循环加个if判断。楼主可以试试
for循环好做,第九章的实验就做了,加if判断后面讲过了,不知道楼主学到了没有。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-06-28 19:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-29 22:09 |
我来试试!见笑了!
;以下实现方法只统计 包含10 个a以下字符的方法,因为超过10个a,就要做16进制转换成ASCII码显示的方法
assume cs:code,ds:data
data segment
strd db 'this is a c program','$'
show db 'This string have '
count db 0
strend db ' a on it!$'
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,offset strd
mov bx,0
cld
s1: lodsb ;读入strd标识的单个字符
cmp al,'$' ;判断是否结束符号
je s_end
cmp al,'a' ;和字符 a 比较
je addbx
jmp s1
addbx: inc bx ;统计是字符a 加1
jmp s1
s_end: mov di,offset count ;以下为显示 show 段以$为结束符的字符串
mov byte ptr [di],bl
add byte ptr [di],30h
mov dx,offset show
mov ah,9
int 21h
mov ax,4c00h | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-06-29 08:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-19 11:52 |
|
|
|
|
|
[第4楼]
[ 回复时间:2008-06-29 21:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-29 22:09 |
不知道楼主为什么一定要子程序,再来试试!
;以下实现方法只能正确显示 包含999 个a以下字符的方法
assume cs:code,ds:data
data segment
strd db 'this is a c program','$'
show db 'This string have '
count db 3 dup (0)
strend db ' a on it!$'
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,offset strd
mov bx,0
mov ah,0
call scanstr
mov ax,4c00h
int 21h
;scanstr 说明: 查找字符串包含多少个a
;入 参: si
;出 参: 无
scanstr proc
snext: lodsb
cmp al,'$'
je s_ret
cmp al,'a'
jne next
inc bx
next: jmp snext
s_ret: call hextoasc
mov dx,offset show
mov ah,9
int 21h
ret
scanstr endp
;hextoasc 说明: 16进制转成10进制,这个没做防溢出处理
;入 参: BX
;出 参 : 无
hextoasc proc
mov cl,10
mov ax,bx
div cl
add ah,30h
mov count[2],ah
xor ah,ah
div cl
add ax,3030h
mov word ptr count,ax
ret
hextoasc endp
code ends
end start | | |
|