
汇编语言编写程序代码
用汇编语言编程完成,并要用masm运行正确。题目为:从键盘输入若干个整数(包括正整数,负整数及零),以#号结束,统计其中正整数、负整数及零的个数,并显示输出结果。data...
用汇编语言编程完成,并要用masm运行正确。题目为:从键盘输入若干个整数(包括正整数,负整数及零),以#号结束,统计其中正整数、负整数及零的个数,并显示输出结果。
data segment
ibuf dw 100 dup(0)
num equ $-ibuf
da1 db 0
da2 db 0
da3 db 0
data ends
code segment
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
start: mov ax,data
mov ds,ax
lea si,ibuf
mov cx,num
input: call myinput
mov [si],al
loop input
lea si,ibuf
mov cx,num
xor al,al
don1: mov al,[si]
cmp al,0
jge don2
inc da2
jmp end0
don2: cmp al,0
jz don3
inc da1
jmp end0
don3: inc da3
end0: inc si
dec cx
jnz don1
mov ah,4ch
int 21h
myinput proc
mov dx,offset ibuf
mov ah,10
int 21h
mov cl,ibuf+1
mov ch,0
mov si,offset ibuf+2
cmp byte ptr[si],'-'
pushf
jne sininc
inc si
dec cx
sininc:mov ax,0
again: mov dx,10
mul dx
and byte ptr[si],0fh
add al,[si]
adc ah,0
inc si
loop again
popf
jnz nneg
neg ax
nneg: mov binary,ax
ret
myinput endp
code ends
end start
这是我的代码,但是错误太多,因为明中午(15日)要交,恳请各位请高手改一下,非常感谢或者重新帮我编写 不胜感激 展开
data segment
ibuf dw 100 dup(0)
num equ $-ibuf
da1 db 0
da2 db 0
da3 db 0
data ends
code segment
assume ss:stack,cs:code,ds:data
push ds
sub ax,ax
push ax
start: mov ax,data
mov ds,ax
lea si,ibuf
mov cx,num
input: call myinput
mov [si],al
loop input
lea si,ibuf
mov cx,num
xor al,al
don1: mov al,[si]
cmp al,0
jge don2
inc da2
jmp end0
don2: cmp al,0
jz don3
inc da1
jmp end0
don3: inc da3
end0: inc si
dec cx
jnz don1
mov ah,4ch
int 21h
myinput proc
mov dx,offset ibuf
mov ah,10
int 21h
mov cl,ibuf+1
mov ch,0
mov si,offset ibuf+2
cmp byte ptr[si],'-'
pushf
jne sininc
inc si
dec cx
sininc:mov ax,0
again: mov dx,10
mul dx
and byte ptr[si],0fh
add al,[si]
adc ah,0
inc si
loop again
popf
jnz nneg
neg ax
nneg: mov binary,ax
ret
myinput endp
code ends
end start
这是我的代码,但是错误太多,因为明中午(15日)要交,恳请各位请高手改一下,非常感谢或者重新帮我编写 不胜感激 展开
2个回答
展开全部
家里电脑有这样的代码但是你中午之前要肯定不行了
我这里有给定数字的计算正负个数的。你添加个手动输入数值的功能就可以实现你的要求
data segment
MSG DB 20,-3,0,-59,60,-46,-7 ;这里重新定义长度
cunt1 equ $-msg;后面需要重新赋值
cunt2 db 0 ;正数置初值
cunt3 db 0 ;0数置初值
cunt4 db 0 ;负数置初值
buffer db 10h dup(0)
data ends
code segment
assume ds:data,cs:code
mov ax,data
mov ds,ax
mov ax,0
mov si,0;下一句就执行键盘输入数据,计算输入的字符个数
mov cx,cunt1;置循环值,输入字符的总数
lp: mov al,msg[si]
test al,ffh;测试是否为0
jz lk1
test al,10000000b;测试符号位
jz lk2
inc cunt4;负数计数加一
lk1: inc cunt3;0数计数加一
lk2: inc cunt2;正数计数加一
inc si;指向下一个数据
loop lp;后面添加显示的代码就可以了
code ends
end start
我这里有给定数字的计算正负个数的。你添加个手动输入数值的功能就可以实现你的要求
data segment
MSG DB 20,-3,0,-59,60,-46,-7 ;这里重新定义长度
cunt1 equ $-msg;后面需要重新赋值
cunt2 db 0 ;正数置初值
cunt3 db 0 ;0数置初值
cunt4 db 0 ;负数置初值
buffer db 10h dup(0)
data ends
code segment
assume ds:data,cs:code
mov ax,data
mov ds,ax
mov ax,0
mov si,0;下一句就执行键盘输入数据,计算输入的字符个数
mov cx,cunt1;置循环值,输入字符的总数
lp: mov al,msg[si]
test al,ffh;测试是否为0
jz lk1
test al,10000000b;测试符号位
jz lk2
inc cunt4;负数计数加一
lk1: inc cunt3;0数计数加一
lk2: inc cunt2;正数计数加一
inc si;指向下一个数据
loop lp;后面添加显示的代码就可以了
code ends
end start
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2023-06-12 广告
单片机汇编程序是用汇编语言编写的程序,用于控制单片机的操作。汇编语言是一种比较接近计算机硬件语言的低级语言,相对于高级语言来说更容易理解和实现。下面是单片机汇编程序的基本步骤:1. 将代码和数据汇编到规定的段中。2. 在存储器中用未初始化的...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询