鱼C论坛

 找回密码
 立即注册
查看: 405|回复: 1

[汇编作业] 哈哈,我做的王爽汇编第三版实验10的答案

[复制链接]
最佳答案
0 
发表于 2018-5-11 16:09:55 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
第二个是抄的网上的,这个感觉还不错(其实我没去搞太明白,那个公式就没太懂怎么用。。。)、
但是第一个和第三个是我完全原创,尤其是第三个,比百度到的强多了啊,很有成就感!!废话不多说,下面贴上

虽然我知道有很多大牛,也基本没人看。。。我是初学,头一次发帖,轻拍

第一个
assume cs:code,ds:data

data segment  
db 'welcome to masm!',0,1
data ends

code segment

show_str: mov ax,0b800h
          mov es,ax
          mov al,160
          mul dh
          push ax
          mov al,2
          mul dl
          pop di
          add di,ax ;将显示起始位置计算并设置为 es:[di]
          mov bl,cl ;将cl值传入bl留用颜色设置
          
   print: mov ch,0
          mov cl,ds:[si]
          jcxz print_end ;若读取字符为0时跳至结束
          mov es:[di],cl ;设置字符内容
          mov es:[di+1],bl ;设置字符颜色
          inc si
          add di,2  ;移动指针
          jmp short print
print_end:ret         

start: mov dh,8
       mov dl,10
       mov cl,2
       mov ax,data
       mov ds,ax
      
       call show_str

mov ax,4c00h
int 21h
code ends

end start

第二个
assume cs:code

code segment

   divdw: push ax   
          mov dx,ax
          mov dx,0
          div cx
          pop bx
          push ax

          mov ax,bx
          div cx
          mov cx,dx
          pop dx
divdw_end:ret               
         

start: mov ax,4240h
       mov dx,000fh
       mov cx,0ah
            
       call divdw

mov ax,4c00h
int 21h
code ends

end start

第三个
assume cs:code

data segment
db 10 dup(0)
data ends

code segment

   dotc: mov bx,10  ;设置除数
         mov di,0   ;设置结果的存储顺序
dstart: mov dx,0   ;因为商要大于255,所以要用32位被除数,dx要设为0     
         div bx
         mov cx,ax  ;当商为0时,要结束计算,跳转
         add dl,30h ;设置ASCⅡ码
         push dx    ;要进栈,之后在放出来,因为要逆序存储,否则结果是反的
         inc si            ;记录结果的位数
         jcxz s     ;cx=0时,跳转   
         jmp short dstart

      s: mov cx,si  ;根据结果的位数设置循环次数
     s1: pop dx
         mov [di],dl;存储到ds时要用字节,但是出栈时必须是两位的字,此时用dl的内容即可
         inc di     
         loop s1    ;循环,将栈内数据都转移到ds段中

dotc_end:ret

show_str: mov ax,0b800h
          mov es,ax
          mov al,160
          mul dh
          push ax
          mov al,2
          mul dl
          pop di
          add di,ax ;将显示起始位置计算并设置为 es:[di]
          mov bl,cl ;将cl值传入bl留用颜色设置
          
   print: mov ch,0
          mov cl,ds:[si]
          jcxz print_end ;若读取字符为0时跳至结束
          mov es:[di],cl ;设置字符内容
          mov es:[di+1],bl ;设置字符颜色
          inc si
          add di,2  ;移动指针
          jmp short print
print_end:ret         


start: mov ax,12666
       mov bx,data
       mov ds,bx
       mov si,0
            
       call dotc
      
       mov dh,8
       mov dl,3
       mov cl,2
       mov si,0

       call show_str


mov ax,4c00h
int 21h
code ends

end start

最佳答案
0 
 楼主| 发表于 2018-5-13 17:55:53 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-8-18 22:33

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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