求教2个简单汇编程序

hanty1986 2009-05-22 09:53:35
问题一:
给定一个字节型数组,长度为10字节:
VARB DB 14, -25, 66, -17, 78, -33, 46
DB -96, 71, 80
编写一个完整的源程序,统计数组中奇数和偶数的个数,统计结果分别保存在ODDNUM和EVENNUM单元中。

问题二:
从键盘输入(带回显)一个长度在10字符以内的字符串,并保存在缓冲区;
检测并删除字符串中的数字字符,将字符串中所有小写字母改为大写字母;
将处理后的字符串在新的一行显示,若字符串为空串则显示 ‘?’。
设计要求:以下两个功能使用子程序实现。
检测并清除数字字符;
字符串中小写字母改为大写字母。

谁好心给个代码清单。
...全文
309 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanty1986 2009-06-01
  • 打赏
  • 举报
回复
谢谢了。感激不尽。
zb_0527 2009-05-26
  • 打赏
  • 举报
回复
data segment
string db 100,0,100 dup(0)
string2 db 'Please input a sting, including numbers : ',0dh,0ah,'$'
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,string2
mov ah,09h
int 21h
lea dx,string
mov ah,0ah
int 21h
mov cl,string+1
mov si,2
call da
call qushu
mov ah,4ch
int 21h
qushu proc
lop:
cmp string[si],39h
ja output
cmp string[si],30h
jb output
jae notput
output:
mov dl,string[si]
mov ah,02h
int 21h
notput:
inc si
loop lop
qushu endp
da proc
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
da endp
code ends
end start
先给你一个去除数字的吧...浅显易懂..
大写转小写没大区别,自己再试试吧...


wxjeacen 2009-05-26
  • 打赏
  • 举报
回复
.section .data
array:
.int 1,2,3,4,5,6,7,8,9
array_end:
.equ size,array_end-array
oddnum:
.int 0
evennum:
.int 0
output:
.string "oddnum= %d,evennum=%d.\n"
.section .bss
.section .text
.globl _start
_start:
nop
leal array,%esi
xorl %ecx,%ecx
movl $9,%ecx
xorl %eax,%eax
movl %eax,oddnum
xorl %eax,%eax
movl %eax,evennum
loop:
dec %ecx
js end
pushl %ecx
movl array(,%ecx,4),%eax
testl $0x01,%eax
jnz odd
jmp even
odd:
movl oddnum,%eax
inc %eax
movl %eax,oddnum
popl %ecx
jmp loop
even:
movl evennum,%eax
inc %eax
movl %eax,evennum
popl %ecx
jmp loop

end:
pushl evennum
pushl oddnum
pushl $output
call printf
movl $1,%eax
movl $0,%ebx
int $0x80
BAYNPU 2009-05-23
  • 打赏
  • 举报
回复
问题二:
.model small
.stack
.data
array db 255
db 0
array1 db 255 dup('$')
array2 db 0dh,0ah,'$'
.code
.startup
mov ah,0ah
mov dx,offset array
int 21h
mov dx,offset array2
mov ah,09h
int 21h
mov bx,offset array1
again: mov al,[bx]
cmp al,'$'
jz done
cmp al,'a'
jb next
cmp al,'z'
ja next
sub al,20h
mov [bx],al
next: inc bx
jmp again
done: mov dx,offset array1
mov ah,09h
int 21h
.exit 0
end

第一问题:
.model small
.stack
.data
VARB DB 14, -25, 66, -17, 78, -33, 46, -96, 71, 80
oddnum db ?
evennum db ?
count equ($-varb)/type varb
.code
.startup
mov si,offset VARB
mov di,offset ODDNUM
mov bx,offset EVENNUM
mov ax,ds
mov es,ax
mov cx,count
cld
go_on: lodsb
test al,80h
jnz minus
stosb
jmp again
minus: xchg bx,di
stosb
xchg bx,di
again: dec cx
jnz go_on
.exit 0
end

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧