重金悬赏!!!汇编语言高手的进来看看

小弟也是初来乍到,大家一起学习一下,

这是第一个程序,看不清楚的欢迎提问:

datasegment

bufdb100,-120,1,2,4

countequ$-buf

dataends

codesegment

assumeds:data,cs:code

start:movax,data

movds,ax

movbl,buf

cmpbl,0

jglab

negbl

lab:movcx,count-1

leasi,buf+1

next:moval,[si]

cmpal,0

jglab1

negal

lab1:cmpbl,al

jblab2

movbl,al

lab2:incsi

loopnext

movch,2

movcl,4

print:rorbl,cl

movdl,bl

anddl,0fh

adddl,30h

cmpdl,39h

jbprt

adddl,7

prt:movah,2

int21h

decch

jnzprint

exit:movah,4ch

int21h

codeends

endstart

这是第二个程序,(这是在输入的整数小于225情况下成立的,满足要求)

datasegment

bccddb?

dataends

codesegment

assumecs:code,ds:data

start:movax,data

movds,ax

movbx,0

new:movah,1

int21h

subal,30h

jbexit

cmpal,9

jaexit

xchgal,bl

movcl,0ah

mulcl

xchgal,bl

addbl,al

jmpnew

exit:movbccd,bl

movah,4ch

int21h

codeends

endstart

这是第五个程序,采用除十取余法,以下是代码:codesegment

assumecs:code

start:movch,2

movcl,4

new:movah,1

int21h

subal,30h

cmpal,30h

jblab

subal,27h

lab:shlbl,cl

orbl,al

decch

jnznew;输入一个两位十六进制数

movch,2;转换为十进制

movcl,4

movdl,10

moval,bl

movbl,0

retry:shrbl,cl

movah,0

divdl;dl放除数10

rorah,cl

orbl,ah

decch

jnzretry

movch,2;输出

movcl,4

movdl,al

adddl,30h

movah,2

int21h

print:rolbl,cl

movdl,bl

anddl,0fh

adddl,30h

movah,2

int21h

decch

jnzprint

exit:movah,4ch

int21h

codeends

endstart

(这个程序的一个小缺点就是没有容错处理,但是默认输入正确,所以还是符合要求的)

以上程序均经过调试

老哥太累了啊,明天接着编

第四道题目其实和第二道差不多,存在内存中的二进制其实就是十六进制,只要将第二道循环两遍就可以

第三道嘛方法和前面的差不多,其实说到底就是把十六进制转换为十进制,就是在输入的时候比较麻烦。我就说下方法吧:用一个循环次数为8的循环输入,第一次输入的比如是1的话,减去30h,乘以2^7,加到寄存器BX里面;第二次同样的,只不过是乘以2^6,加到BX里面,依次类推,就可以把输入的8个1,0转换为是十六进制,后面的工作就是把十六进制转换为是十进制输出,和前面的一样

希望回答的够清楚,欢迎探讨啊

免责声明:本站发布的游戏攻略(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!