鱼C论坛

 找回密码
 立即注册
查看: 7365|回复: 10

Assembly language 实验4

[复制链接]
匿名鱼油
匿名鱼油  发表于 2013-7-22 10:48:44 |阅读模式
20鱼币
本帖最后由 匿名 于 2015-8-30 16:24 编辑

各位同学大家好哈,我到了第五章实验四卡到了。请大家帮忙解释一下代码和问题~ 1.png

2

2.png

3

3.png



最佳答案

查看完整内容

由于我个人习惯了C,C++所以以下的“;”均用//代替 assume cs:code code segment mov ax, code ;或mov ax, cs //code是一个标记翻译的时候翻译成一个地址,而前面又cs:code因此 cs和code指向了同一个地址,把哪个地址给通过ax给ds都是一样的 mov ds,ax //通过ax给ds指明数据段的段地址 mov ax,0020h mov es,ax //上面两句就是通过ax作为跳板向 es传送值0020h mov ...
回复

使用道具 举报

发表于 2013-7-22 10:48:45 | 显示全部楼层
由于我个人习惯了C,C++所以以下的“;”均用//代替
assume cs:code   

code segment   

     mov ax, code ;或mov ax, cs  //code是一个标记翻译的时候翻译成一个地址,而前面又cs:code因此 cs和code指向了同一个地址,把哪个地址给通过ax给ds都是一样的

     mov ds,ax    //通过ax给ds指明数据段的段地址

     mov ax,0020h   

     mov es,ax    //上面两句就是通过ax作为跳板向  es传送值0020h

     mov bx,0      //将bs置0  因为要用它作为偏移 地址

     mov cx, 18h   ;或mov cx, 17h    ;或sub cx,5        //cx  loop  的好基友  执行循环18h次

  s: mov al,[bx]    //将ds:【bx】里的值给al  传送1个字节

     mov es:[bx],al    再将al的值给进附加段里边(这里附加段为0020h)

     inc bx    //bx+1   由于它是bx的内容在这里作为一个偏移地址  因此它加一个就是挪动动一个内存单元

     loop s   

     mov ax,4c00h   

     int 21h   

code ends   

end
这里就是将代码段的内容当数据来用。对代码段的数据进行传送到0020h这个内存单元。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 10:58:53 | 显示全部楼层
代码呢,在哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 11:09:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 12:35:47 | 显示全部楼层
Crazy迷恋. 发表于 2013-7-22 12:18
由于我个人习惯了C,C++所以以下的“;”均用//代替
assume cs:code   

你好,还有其它两个呢。求解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 12:40:28 | 显示全部楼层
被你蛊惑的心丶 发表于 2013-7-22 12:35
你好,还有其它两个呢。求解。

我找找~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 13:13:10 | 显示全部楼层
被你蛊惑的心丶 发表于 2013-7-22 12:35
你好,还有其它两个呢。求解。

mov ax,20h

     mov ds,ax//老规矩~~通过ax做桥梁 向ds数据段寄存器赋值也就是说它存储的数据段地址是20h

     mov bx,0//要做偏移地址用,从0开始因此将它为0

     mov cx,40h    ;或mov cx,64//这后面一句忽悠人的~~为什么这么说呢  40h的十进制就是64  64的十进制就是40h

s:   mov [bx],bl  //将bx的低8位给传送到ds:【bx】中

     inc bx   //增加1         为1的时候 其他时候自己可以推算         ax 0000000000000001         al00000001   

     loop s

     mov ax,4c00h

     int 21h

就贴第二个吧~~~第一个用的是栈的一个方法来实现~~~~语法上都是一样的看过这两个 第一个语法上应该没有什么问题~~~要读懂这些题呢主要还是心中的一个逻辑~~~它是利用了什么方式去达到这样一个目的的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 22:22:26 | 显示全部楼层
Crazy迷恋. 发表于 2013-7-22 13:13
mov ax,20h

     mov ds,ax//老规矩~~通过ax做桥梁 向ds数据段寄存器赋值也就是说它存储的数据段地址是 ...

好的。很谢谢你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-24 12:57:39 | 显示全部楼层
好了。求解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-23 22:31:51 | 显示全部楼层
好了。求解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-24 00:51:23 | 显示全部楼层
这个解释很明白,点赞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表