主题:哪个大哥大姐来帮忙弄弄注释,不太看的懂~!
1、把某个十进制数ASCII码串转换为对应非压缩BCD和压缩BCD的示例程序
data segment
msg db "Input a string number:$"
buf db 10
nu db 0
string db 10 dup("$")
unpackBCD db 10 dup(0)
packBCD db 5 dup(0)
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,offset msg
mov ah,09h
int 21h
mov ah,0ah
lea dx,buf
int 21h
xor ch,ch
mov cl,nu
lea si,string
lea di,unpackBCD
lp: mov al,[si]
and al,0fh
mov [di],al
inc si
inc di
loop lp
lea si,unpackBCD
lea di,packBCD
xor ch,ch
mov cl,nu
shr cx,1
lp1: mov bl,[si]
shl bl,1
shl bl,1
shl bl,1
shl bl,1
mov al,bl
inc si
mov bl,[si]
or al,bl
mov [di],al
inc si
inc di
loop lp1
mov ah,4ch
int 21h
code ends
end start
2、设已在地址F000:0000H开始的内存区域安排了100个字节的无符号8位2进制数。请编写一个程序求它们的和,并转换为对应十进制数的ASCII码串。
data segment
pr1 db "Sum:$"
buf db 5 dup("$")
data ends
code segment
assume cs:code,ds:data
start: mov ax,0f000h
mov ds,ax
xor ax,ax
mov cx,64h
xor si,si
lp: mov bl,[si]
xor bh,bh
add ax,bx
inc si
loop lp
mov bx,data
mov ds,bx
lea si,buf
mov cx,0404h
lp1: rol ax,cl
mov dl,al
and dl,0fh
cmp dl,09h
jbe next
add dl,07h
next: add dl,30h
mov [si],dl
inc si
dec ch
jne lp1
lea dx,pr1
mov ah,09h
int 21h
lea dx,buf
mov ah,09h
int 21h
mov dl,"H"
mov ah,02h
int 21h
mov ah,4ch
int 21h
code ends
end start
3、设从地址F000:0000H开始的内存区域是缓冲区,存放了一组单字节的正数或负数,以0结尾。请编写一个程序,确定其中最大的正数和最小的负数。
data segment
pr1 db 0ah,0dh,"Max Plus:$"
pr2 db 0ah,0dh,"Min Negative:$"
plus db 0
nega db 0
data ends
code segment
assume cs:code,ds:data
start: mov ax,0f000h
mov es,ax
mov ax,data
mov ds,ax
xor ax,ax
mov cx,0400h
xor si,si
mov bx,0000h
lp: mov al,es:[si]
cmp al,bh
jle next1
mov bh,al
jmp next2
next1: cmp al,bl
jge next2
mov bl,al
next2: loop lp
mov plus,bh
mov nega,bl
mov ah,09h
mov dx,offset pr2
int 21h
mov bl,nega
call disp
mov ah,09h
mov dx,offset pr1
int 21h
mov bl,plus
call disp
mov ah,4ch
int 21h
disp proc
mov cx,8
lp1: rol bl,1
jc next3
mov dl,30h
mov ah,02h
int 21h
jmp next
next3: mov dl,31h
mov ah,02h
int 21h
next: loop lp1
mov dl,"H"
mov ah,02h
int 21h
ret
disp endp
code ends
end start
4、设从地址F000:0000H开始的1K字节内存区域是缓冲区,请写一个可收集该区域内所以子串"OK"开始地址的程序。
data segment
pr1 db 0dh,0ah,"OK address:$"
buf db 5 dup("$")
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov bx,0a000h
mov es,bx
mov ax,'OK'
mov cx,10h
xor di,di
cld
rep stosw
xor si,si
mov cx,0400h
shr cx,1
mov bp,'OK'
lp: cmp bp,es:[si]
jne next1
mov bx,si
call disp
next1: inc si
inc si
loop lp
mov ah,4ch
int 21h
disp proc
lea di,buf
mov cx,0404h
lp1: rol bx,cl
mov dl,bl
and dl,0fh
cmp dl,09h
jbe next
add dl,07h
next: add dl,30h
mov [di],dl
inc di
dec ch
jne lp1
lea dx,pr1
mov ah,09h
int 21h
lea dx,buf
mov ah,09h
int 21h
mov dl,"H"
mov ah,02h
int 21h
ret
disp endp
code ends
end start
注:以上几题均来自《汇编原理程序设计教程》(P109)
麻烦各位帮个忙,这几个程序是老师写了供参考用的,不过小弟实在看不懂,刚学汇编,属于菜鸟级的,还望各位大哥能帮帮忙哦~!注释尽量写的详尽一点,在此小弟先谢过啦~!
可以把注释后的程序发到我邮箱(yuanlaibucuo@126.com),也可以跟帖贴出来~!
data segment
msg db "Input a string number:$"
buf db 10
nu db 0
string db 10 dup("$")
unpackBCD db 10 dup(0)
packBCD db 5 dup(0)
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,offset msg
mov ah,09h
int 21h
mov ah,0ah
lea dx,buf
int 21h
xor ch,ch
mov cl,nu
lea si,string
lea di,unpackBCD
lp: mov al,[si]
and al,0fh
mov [di],al
inc si
inc di
loop lp
lea si,unpackBCD
lea di,packBCD
xor ch,ch
mov cl,nu
shr cx,1
lp1: mov bl,[si]
shl bl,1
shl bl,1
shl bl,1
shl bl,1
mov al,bl
inc si
mov bl,[si]
or al,bl
mov [di],al
inc si
inc di
loop lp1
mov ah,4ch
int 21h
code ends
end start
2、设已在地址F000:0000H开始的内存区域安排了100个字节的无符号8位2进制数。请编写一个程序求它们的和,并转换为对应十进制数的ASCII码串。
data segment
pr1 db "Sum:$"
buf db 5 dup("$")
data ends
code segment
assume cs:code,ds:data
start: mov ax,0f000h
mov ds,ax
xor ax,ax
mov cx,64h
xor si,si
lp: mov bl,[si]
xor bh,bh
add ax,bx
inc si
loop lp
mov bx,data
mov ds,bx
lea si,buf
mov cx,0404h
lp1: rol ax,cl
mov dl,al
and dl,0fh
cmp dl,09h
jbe next
add dl,07h
next: add dl,30h
mov [si],dl
inc si
dec ch
jne lp1
lea dx,pr1
mov ah,09h
int 21h
lea dx,buf
mov ah,09h
int 21h
mov dl,"H"
mov ah,02h
int 21h
mov ah,4ch
int 21h
code ends
end start
3、设从地址F000:0000H开始的内存区域是缓冲区,存放了一组单字节的正数或负数,以0结尾。请编写一个程序,确定其中最大的正数和最小的负数。
data segment
pr1 db 0ah,0dh,"Max Plus:$"
pr2 db 0ah,0dh,"Min Negative:$"
plus db 0
nega db 0
data ends
code segment
assume cs:code,ds:data
start: mov ax,0f000h
mov es,ax
mov ax,data
mov ds,ax
xor ax,ax
mov cx,0400h
xor si,si
mov bx,0000h
lp: mov al,es:[si]
cmp al,bh
jle next1
mov bh,al
jmp next2
next1: cmp al,bl
jge next2
mov bl,al
next2: loop lp
mov plus,bh
mov nega,bl
mov ah,09h
mov dx,offset pr2
int 21h
mov bl,nega
call disp
mov ah,09h
mov dx,offset pr1
int 21h
mov bl,plus
call disp
mov ah,4ch
int 21h
disp proc
mov cx,8
lp1: rol bl,1
jc next3
mov dl,30h
mov ah,02h
int 21h
jmp next
next3: mov dl,31h
mov ah,02h
int 21h
next: loop lp1
mov dl,"H"
mov ah,02h
int 21h
ret
disp endp
code ends
end start
4、设从地址F000:0000H开始的1K字节内存区域是缓冲区,请写一个可收集该区域内所以子串"OK"开始地址的程序。
data segment
pr1 db 0dh,0ah,"OK address:$"
buf db 5 dup("$")
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov bx,0a000h
mov es,bx
mov ax,'OK'
mov cx,10h
xor di,di
cld
rep stosw
xor si,si
mov cx,0400h
shr cx,1
mov bp,'OK'
lp: cmp bp,es:[si]
jne next1
mov bx,si
call disp
next1: inc si
inc si
loop lp
mov ah,4ch
int 21h
disp proc
lea di,buf
mov cx,0404h
lp1: rol bx,cl
mov dl,bl
and dl,0fh
cmp dl,09h
jbe next
add dl,07h
next: add dl,30h
mov [di],dl
inc di
dec ch
jne lp1
lea dx,pr1
mov ah,09h
int 21h
lea dx,buf
mov ah,09h
int 21h
mov dl,"H"
mov ah,02h
int 21h
ret
disp endp
code ends
end start
注:以上几题均来自《汇编原理程序设计教程》(P109)
麻烦各位帮个忙,这几个程序是老师写了供参考用的,不过小弟实在看不懂,刚学汇编,属于菜鸟级的,还望各位大哥能帮帮忙哦~!注释尽量写的详尽一点,在此小弟先谢过啦~!
可以把注释后的程序发到我邮箱(yuanlaibucuo@126.com),也可以跟帖贴出来~!