鱼C论坛

 找回密码
 立即注册
查看: 3174|回复: 4

[争议讨论] 实验10

[复制链接]
发表于 2012-1-8 11:41:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第一题,速度不错 1小时弄出来了,未看教程
  1. assume cs:code
  2. data segment
  3. db 'Welcome to masm!',0
  4. data ends

  5. code segment
  6. start:
  7. mov dh,8
  8. mov dl,3
  9. mov cl,2
  10. mov ax,data
  11. mov ds,ax
  12. mov si,0
  13. call show_str

  14. mov ax,4c00h
  15. int 21h

  16. show_str:
  17. mov ax,0b800h
  18. mov es,ax ;定义ES是写入段
  19. sub dl,1 ;列数减1
  20. mov al,2 ;因每个显示的字占两个字节,所以要乘2 所以AL=2
  21. mul dl ;乘列数得出列数的地址
  22. mov bx,ax ;将要写入的列地址放入BX保存
  23. mov ah,0 ;ah清0
  24. mov al,dh ;行数给AX,此时AX应是00行数
  25. mov dx,160 ;每行160个字节 此时DX的2个参数已经读过了所有可以覆盖
  26. mul dx ;行数乘160个字节算出要写入的行地址
  27. add bx,ax ;将行数地址和列数地址相加算出实际要写入的地址,放入AX中
  28. mov dh,cl ;将颜色数据放入高地址DH中
  29. s: mov ch,0 ;ch清0
  30. mov cl,byte ptr ds:[si] ;将数据段字符放入Cl中
  31. jcxz s1 ;如果CX=0则跳转到S1结束
  32. mov ch,dh ;将放入DH中的颜色数据拿回来给CL
  33. mov word ptr es:[bx],cx ;将CX的值写入到实际地址中
  34. add si,1
  35. add bx,2
  36. jmp s
  37. s1:
  38. ret




  39. code ends
  40. end start
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-8 13:22:00 | 显示全部楼层
本帖最后由 许楠 于 2012-1-8 13:22 编辑

气死我了,第二题按书上写的乘65536,在网上找了半天怎么乘65536,即使有也忒啰嗦,要用到ADC什么的,不象是这道题的本意,绞尽脑汁了也没想出来怎么乘,没办法看了视频,原来是这样......
算了,脑袋一团浆糊了 先休息一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-8 21:33:36 | 显示全部楼层
  1. assume cs:code
  2. stack segment
  3.         db 8 dup (0)
  4. stack ends

  5. code segment
  6. start:
  7.         mov ax,4240h
  8.         mov dx,000fh
  9.         mov cx,0ah
  10.         call divdw
  11. divdw:
  12.         mov bx,stack
  13.         mov ss,bx
  14.         mov sp,8
  15.         push ax   ;先把AX保存起来
  16.         mov ax,dx  ;将高16位放到低16位里来
  17.         mov dx,0   ;高16位清0
  18.         div cx      ;除CX,除完后DX是余数,AX是商
  19.         mov bx,ax   ;将AX保存在BX中
  20.         pop ax      ;取出AX
  21.         div cx         ;此时DX没动,但DX是高16位,所以相当于乘了65536
  22.         mov cx,dx   ;将余数给CX
  23.         mov dx,bx   ;将BX里的值给DX,当作商的高16位,也就相当于乘了65536,AX则是默认的低16位
  24.         ret

  25. code ends
  26. end start
复制代码
只能先这样了,没办法啊 不会只能看教程 下面弄第3题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-20 10:30:10 | 显示全部楼层
哥们你代码有测试通过么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 00:18:03 | 显示全部楼层
顶楼主 都没问题。。第二题我用的8位除法 为啥第二次除完就出错了?
  1. ;X/N=INT(H/N)*10000H+[REM(H/N)*10000H+L]/N
  2. ;X=1000000=0F4240H,N=10=0AH
  3. DATAS SEGMENT
  4.     DW 4240H,0FH,0AH  
  5. DATAS ENDS

  6. STACKS SEGMENT
  7.     DW 0
  8. STACKS ENDS

  9. CODES SEGMENT
  10.     ASSUME CS:CODES,DS:DATAS,SS:STACKS
  11. START:
  12.     MOV AX,DATAS
  13.     MOV DS,AX
  14.     MOV AX,STACKS
  15.     MOV SS,AX
  16.     MOV SP,0
  17.     MOV AX,WORD PTR DS:[0]
  18.     MOV DX,WORD PTR DS:[2]
  19.     MOV CX,WORD PTR DS:[4]
  20.     CALL DIVDW
  21.     MOV AH,4CH
  22.     INT 21H
  23. DIVDW:
  24.         PUSH AX
  25.         MOV AX,DX
  26.         XOR DX,DX
  27.         DIV CL
  28.         MOV DL,AL ;INT(H/N)*10000H
  29.         POP BX
  30.         ADD BL,AH
  31.         MOV AX,BX ;[REM(H/N)*10000+L]
  32.         DIV CL
  33.         MOV CL,AH
  34.         MOV AH,0
  35. CODES ENDS
  36.     END START
复制代码

T10.2 WHY.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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