求大神讲解汇编!!最好每步在干什么,想干什么备注一下!!!

sinat_33095987 2016-05-28 07:58:58
data segment
buffer db 0ah,0dh,255 ;缓冲区,用于存放字符串
ptr1 db 0dh,0ah,"please input stuno:$"
ptr2 db 0ah,0dh,"stuno:$"
string db 13 dup("0")
mess1 db 0ah,0dh,"Input a number:$"
mess2 db 0ah,0dh,"Out:$"
buf db 5
nu db 0
nustr db 5 dup("0")
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,mess1
mov ah,09h
int 21h
lea dx,buf
mov ah,0ah
int 21h
mov cl,nu
xor ch,ch
lea si,nustr
mov bp,10
xor bx,bx
lp: lodsb
and ax,000fh
xchg ax,bx
mul bp
xchg ax,bx
add bx,ax
loop lp
mov ax,bx
xor bx,bx
mov si,3
call sub1
mov bx,ax
lea dx,mess2
mov ah,09h
int 21h
xor cx,cx
mov si,10
mov ax,bx
lp1: xor dx,dx
div si
or dl,30h
push dx
inc cx
or ax,ax
jnz lp1
lp2: pop dx
mov ah,02h
int 21h
loop lp2
mov ah,4ch
int 21h
sub1 proc
dec ax
cmp ax,1
jz next
call sub1
next: xchg ax,bx
mul si
add ax,bx
ret
sub1 endp
code ends
end start

...全文
1432 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dozemin 2016-09-11
  • 打赏
  • 举报
回复
什么年代了,还玩DOS时代的汇编。有意思么?用点高级语言比这酷多了。 char buf[6] = "00000"; //sub1 proc // dec ax // cmp ax,1 // jz next // call sub1 // next: xchg ax,bx // mul si // add ax,bx // ret // sub1 endp int sub1(int a, int &b, int cc) { a--; if (a != 1) { a = sub1( a, b, cc); } int s = b; b = a; return s * cc + a; } int main(int argc, char *argv) { //mov ax,data //mov ds,ax //lea dx,mess1 //mov ah,09h //int 21h printf("\r\nInput a number:"); //lea dx,buf //mov ah,0ah //int 21h scanf("%5s", &buf); //mov cl,nu //xor ch,ch //lea si,nustr //mov bp,10 //xor bx,bx //lp: lodsb //and ax,000fh //xchg ax,bx //mul bp //xchg ax,bx //add bx,ax //loop lp int sum = 0; for (int i = 0; i < strlen(buf); i++) { sum *= 10; sum += (buf[i] & 0xf); } //mov ax,bx //xor bx,bx //mov si,3 //call sub1 //mov bx,ax int bb = 0; sum = sub1(sum, bb, 3); //lea dx,mess2 //mov ah,09h //int 21h printf( "\r\nOut:"); //其实就是一个%d输出, 汇编中循环除以10直到为0为止, 把结果push到栈中了 // xor cx,cx // mov si,10 // mov ax,bx // lp1: xor dx,dx // div si // or dl,30h // push dx // inc cx // or ax,ax // jnz lp1 // lp2: pop dx // mov ah,02h // int 21h // loop lp2 printf("%d", sum); //mov ah,4ch //int 21h return 0; } /////////////////////////////// //去掉注释后的高级语言 int sub1(int a, int &b, int cc) { a--; if (a != 1) { a = sub1( a, b, cc); } int s = b; b = a; return s * cc + a; } int main(int argc, char *argv) { printf("\r\nInput a number:"); scanf("%5s", &buf); sum = 0; for (int i = 0; i < strlen(buf); i++) { sum *= 10; sum += (buf[i] & 0xf); } int bb = 0; sum = sub1(sum, bb, 3); printf( "\r\nOut:%d", sum); return 0; }
赵4老师 2016-08-22
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试是程序员必须掌握的技能之一。 使用TurboDebug调试16位汇编。
朔北冥 2016-06-12
  • 打赏
  • 举报
回复
坐等大神。。。估计没人会有这耐心
用户 昵称 2016-06-06
  • 打赏
  • 举报
回复

21,453

社区成员

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

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