美声服装辅料有限公司:一个汇编程序,帮我看看哪里有问题??

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 05:05:15
TITLE 8086 Code Template (for EXE file)

; AUTHOR emu8086
; DATE ?
; VERSION 1.00
; FILE ?.ASM

; 8086 Code Template

; Directive to make EXE output:
#MAKE_EXE#

DSEG SEGMENT 'DATA'
msg0 db 'I like my IBM-PC','$'
msg1 db '8088 programming is fun','$'
msg2 db 'Time to buy more diskettes','$'
msg3 db 'This program works','$'
msg4 db 'Turn off that printer','$'
msg5 db 'I have more memory than you','$'
msg6 db 'The PSP can be useful','$'
msg7 db 'BASIC was easier than this','$'
msg8 db 'DOS is indispensable','$'
msg9 db 'Last massage of the day','$'
errmsg db 'error!!! invalid parameter!!','$'
table dw 10 dup(?)
DSEG ENDS

SSEG SEGMENT STACK 'STACK'
DB 256 DUP(0)
tos label word
SSEG ENDS

CSEG SEGMENT 'CODE'

;*******************************************

START PROC FAR

mov ax,SSEG
mov ss,ax
mov sp,offset tos

; Store return address to OS:
PUSH DS
MOV AX, 0
PUSH AX

; set segment registers:
MOV AX, DSEG
MOV DS, AX

; TODO: add your code here!!!!

mov di,0
mov si,0
mov cx,10d
haha:
mov ah,0
mov al,msg0[si]
mov table[di],ax
inc di
inc si
loop haha

begin:
mov ah,1
int 21h
sub al,'0'
jc error
cmp al,9d
ja error
mov ah,0
call display
jmp begin

error:
mov dl,offset errmsg
mov ah,09h
int 21h
mov dl,0dh
mov ah,2h
int 21h
mov dl,0ah
mov ah,2h
int 21h
jmp begin

display:
mov bx,ax
mov dx,table[bx]
mov ah,09h
int 21h
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
jmp begin

; return to operating system:
RET
START ENDP

;*******************************************

CSEG ENDS

END START ; set entry point.

我一个菜鸟,刚开始学

求高手指教,谢谢
就是这个东西为了转换一个十进制为二进制数
用了子函数,就是想问问
好像是我的那个table[di]那里错了,但不知道是哪里错了??????

table dw 10 dup(?)
修改为
table db 10 dup(?),'$'
字符串变量应该用db类型存放
输出是,应用$定界符表示输出结束

mov table[di],ax
修改为
mov table[di],al
根据上面修改,应该是以字节为单位作交换

mov dl,offset errmsg
修改为
mov dx,offset errmsg
DOS中断调用09号现实功能,字符串开始地址应该存放在dx中

mov bx,ax
mov dx,table[bx]
修改为
mov dx,offset table
取字符串首地址到dx中,做为现实功能参数

应添加assume伪指令,手动设置cs与代码段、ds与数据段、ss与堆栈段关连
应添加语句,跳转到ret指令,不然程序不会结束返回到DOS

靠。刚开始学就能编? 真是天才。我只能运行别人的程序。做点加减发什么的小程序。 你也真够牛的

cmp al,9d
应该cmp al,9dh
最后最好加
end