谁能为每句后面加注释:说明这句的作用。谢谢!
发布网友
发布时间:2022-05-23 18:22
我来回答
共3个回答
热心网友
时间:2023-11-27 20:46
data segment ;定义数据段
data ends ;数据段定义结束
stack segment para stack 'stack' ;定义堆栈段
db 100h p(?) ;预留50个字的堆栈空间
stack ends ;堆栈段定义结束
code segment ;定义代码段
assume cs:code,ds:data,ss:stack ;段寄存器关联说明
start: ;代码段第一条指令从这里开始
mov ax,data ;数据段段址→ax
mov ds,ax ;ax→ds,给数据段段寄存器赋值
call decibin ;调用子程序,键盘输入几位十进制数并将其转换成十六进制数
call crlf ;调用子程序,输出一个回车、换行
call binihex ;调用子程序,将bx中的二进制数转换成可以显示的十六进制数并显示
call crlf ;调用子程序,输出一个回车、换行
mov ah,4ch ;结束程序
int 21h ;dos功能调用
decibin proc near ;定义子程序decibin
; 子程序:键盘输入几位十进制数并将其转换成十六进制数
push ax ;入栈保存ax寄存器
push cx ;入栈保存cx寄存器
pushf ;入栈保存标志寄存器
mov bx,0 ;0→bx
newchar:
mov ah,1 ;dos功能调用1号功能:带回显的控制台输入
int 21h ;dos功能调用
sub al,30h ;al-30h→al
jl exit ;al<0,转去恢复相关寄存器的值,结束子程序,返回调用者
cbw ;al的内容扩展为字
xchg ax,bx ;交换寄存器ax、bx的值
mov cx,10 ;10→cx
mul cx ;ax*10→dx,ax
xchg ax,bx ;交换寄存器ax、bx的值
add bx,ax ;bx+ax→bx
jmp newchar ;接收下一个数字
exit: popf ;标志寄存器出栈,恢复标志位
pop cx ;出栈,恢复cx寄存器
pop ax ;出栈,恢复ax寄存器
ret ;子程序结束,返回调用者
decibin endp ;decibin子程序定义结束
binihex proc near ;定义子程序binihex
; 子程序:将bx中的二进制数转换成可以显示的十六进制数并显示
push ax ;入栈保存ax寄存器
push cx ;入栈保存cx寄存器
push dx ;入栈保存dx寄存器
pushf ;入栈保存标志寄存器
mov ch,4 ;4→ch,循环计数
rotate:
mov cl,4 ;4→cl
rol bx,cl ;bx循环左移4位
mov al,bl ;bl→al
and al,0fh ;屏蔽al的高4位
add al,30h ;转换成ASCII码
cmp al,3ah ;al>'9'?
jl printit ;否,显示它
add al,7h ;转换成对应的十六进制字母
printit:
mov dl,al ;al→dl
mov ah,2 ;dos功能调用2号功能:显示一个字符(dl中)
int 21h ;dos功能调用
dec ch ;计数器减1
jnz rotate ;不为0,转换并显示下一位十六进制数
mov dl,'H' ;'H'→dl
mov ah,2 ;dos功能调用2号功能:显示一个字符(dl中)
int 21h ;dos功能调用
popf ;标志寄存器出栈,恢复标志位
pop dx ;出栈,恢复dx寄存器
pop cx ;出栈,恢复cx寄存器
pop ax ;出栈,恢复ax寄存器
ret ;子程序结束,返回调用者
binihex endp ;binihex子程序定义结束
crlf proc near ;定义子程序crlf
; 子程序,输出一个回车、换行
push ax ;入栈保存ax寄存器
push dx ;入栈保存dx寄存器
pushf ;入栈保存标志寄存器
mov dl,0dh ;回车符→dl
mov ah,2 ;dos功能调用2号功能:显示一个字符(dl中)
int 21h ;dos功能调用
mov dl,0ah ;换行符→dl
mov ah,2
int 21h
popf ;标志寄存器出栈,恢复标志位
pop dx ;出栈,恢复dx寄存器
pop ax ;出栈,恢复ax寄存器
ret ;子程序结束,返回调用者
crlf endp ;crlf子程序定义结束
code ends ;代码段定义结束
end start ;编译到此结束
热心网友
时间:2023-11-27 20:46
data segment
data ends
stack segment para stack 'stack'
db 100h p(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data ;ax=data
mov ds,ax ;ds=ax
call decibin ;调用decibin
call crlf ;调用crlf
call binihex 调用
call crlf 调用
mov ah,4ch ah=4ch
int 21h
decibin proc near decibin
push ax ax进栈
push cx cx进栈
pushf
mov bx,0 bx=0
newchar: 标记
mov ah,1 ah=1
int 21h
sub al,30h
jl exit
cbw
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit: popf
pop cx
pop ax
ret
decibin endp
binihex proc near
push ax
push cx
push dx
pushf
mov ch,4
rotate:
mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
mov dl,'H'
mov ah,2
int 21h
popf
pop dx
pop cx
pop ax
ret
binihex endp
crlf proc near
push ax
push dx
pushf
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
popf
pop dx
pop ax
ret
crlf endp
code ends
end start
其实我也是个半吊子 边查边写 查的郁闷,自己查吧 查好了贴上来看看~~
热心网友
时间:2023-11-27 20:47
汤旺河边 辛苦了 ~ 你给人家分吧~ 人家给你那么多注释~