
汇编语言题目急!!!!!!!!!!!!!
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:在当前光标位置显示一个字符
; 入口:dl=要显示的字符
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr Endp
; -------------------------------------
; 功能:把AX中的二进制有符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Sign_Dec_ASCII Proc Near
push ds
push cs
pop ds
push cs
pop es
push dx
push bx
push di
test ah,80h
jz @@Tran_ASCII
neg ax
push ax
mov dl,'-'
mov ah,2
int 21h
pop ax
@@Tran_ASCII: mov bx,10
lea di,@@Temp_SaveS[5]
mov BYTE ptr [di],'$'
dec di
cld
@@Divide_S: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide_S
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
pop ds
ret
@@Temp_SaveS db 6 dup(?)
Sign_Dec_ASCII EndP
; -------------------------------------
Buffer db 98,-43,56,-67,123,-98,102,-87,-91,-100
Counter equ $-Buffer ;数据个数
Prompt_Str db 13,10,'The negatives: $' ;显示负数个数,提示信息
Press_Key db 13,10,13,10,'The complated. Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es
lea si,Buffer ;取数组变量地址
mov cx,Counter ;元素个数
cld
@@Statics: lodsb ;读入一个元素
test al,80h ;是否正数?
jz $+11 ;是
cbw ;扩展为字
call Sign_Dec_ASCII ;把AX中的二进制有符号数转换成显式的十进制ASCII码,并送显示屏显示
mov dl,20h
call Output_Chr
loop @@Statics
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
num1 db 20,30,-5,40,-21,60,-109,8,12,14
num1 db dup(0)
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov es,ax
lea si,num1
lea di,num2
mov cx,0AH
lab1: test [si],80h
jz lab2
movsb
jmp lab3
lab2: inc si
lab3: loop lab1
mov ax,4c00h
int 21h
code ends
end start