请编写一段汇编语言程序

在以BUF为首地址的内存单元中,存放了100个带符号的双字节数,请编制一个汇编程序求出其中负数的平均值(负数之和大于-32768),并将其存入Average字单元中
你好,谢谢你回答我的问题,我还想问一下,程序中间的
jz $+6 ;正数或0,不累加
这一句,$+6是要跳转到哪儿呢?谢谢

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
Average dw ?
Elements equ 100 ;16位二进制带符号数个数
Start: push cs
pop ds ;使数据段与代码段同段
cld
clc
lea si,BUF ;100个16位二进制带符号数首地址
mov cx,Elements ;16位二进制带符号数个数
xor bx,bx ;初始化计数器
xor dx,dx
xor ax,ax ;初始化累加器
Adding: test [si],8000h
jz $+5 ;正数或0,不累加
inc bx ;计数器加1
adc ax,[si] ;带符号数加法
inc si
inc si ;指向下一个16位二进制数
loop Adding
idiv bx ;带符号数除法
mov Average,ax ;保存平均数
xit_Proc: mov ah,4ch ;结束程序
int 21h
BUF:
Code ENDS
END Start ;编译到此结束

补充回答:跳到下面隔两条指令之后的第一个inc si指令。
这要求程序员对汇编指令字节数非常清楚才可使用,否则,容易产生不可预料的结果。建议初学者不要这样使用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-04
data segment
buf dw 100 dup(?);运行时给实际的数
average dw ?
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
lea si,buf
mov cx,100
mov ax,0
mov dx,0
next:
mov bx,[si]
test bx,8000h
jns next1;无符号表示非负,转Next1
add ax,bx
adc dx,0
next1:
add si,2
loop next
mov bx,100
idiv bx
mov average,ax
mov ax,4c00h
int 21h
code ends
end start
相似回答
大家正在搜