初学汇编,请教几个问题

wisoper 2007-06-28 11:27:01
buf db 8
db ?
db 8 dup(?)

push cx
dec cx
lea si ,buf+2
tt1: inc si
loop tt1
pop cx

以上是程序的片断(书上的练习),该程序用buf+1存数据长度(是怎么取长度的?)
还有 inc si 起到什么作用(该段是要将数值转换为ASCII)

本人初学汇编想问一下有什么好的习题可以做
...全文
166 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wisoper 2007-06-28
  • 打赏
  • 举报
回复
可能还有问题,我过两天结贴
wisoper 2007-06-28
  • 打赏
  • 举报
回复
谢谢楼上的了,以下是详细一点的代码,也供大家参考,
我再去书上查查,
data segment
infon db odh,oah,'Please input a year:$'
y db odh,oah,' this is a leap year! $'
n db odh,oah,' this is not a leap year! $'
w dw 0
buf db 8
db ?
db 8 dup(?)
data ends


start : mov ax,data
mov ds,ax
lea dx,infon(显示字符串)

mov ah,9
int 21h
lea dx,buf
mov ah,10
int 21h
mov cl,[buf+1]
lea dx,buf+2
call datacate
call ifyears


datacate proc near
push cx;
dec cx
lea dx,buf+2
tt1: inc si
loop tt1
pop cx
mov dh ,30h
mov bl,10
mov ax,1
ll: push ax
sub byte ptr [si],dh
mul byte ptr [si]
add w,ax
pop ax
mul bl
dec si
loop ll
ret
datacate endp
zara 2007-06-28
  • 打赏
  • 举报
回复
buf 这个数据结构规范, 是 int21h 的 0ah 字符串输入功能使用的吧.
buf+1 中的数据长度是由 0ah 功能根据实际输入的字符数填充的. 调用该功能后即可直接取该字节来获得输入的字符的格式. 要注意的是, 虽然缓冲区要求给输入时的回车留个位置, 并且, 回车字符也确实被填进了缓冲区中, 但这个数据长度却是不包括那个回车符的.

inc si 在你这个不完全的代码中, 推测的话, 比较可能是通过不停进 1 的方式, 使 si 执行输入字符串的最后一个字符, 虽然该功能有更简单的方法. 但是, 这里没有看到对 cx 置值, 所以只是推测, 你没有将 buf+1 设置给 cx 的代码部分贴上来.

习题方面, 教程还算可以的话, 每个章节后面的练习应该是不错的.

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧