第二次的汇编作业

原创 2004年10月28日 01:04:00

由键盘输入一串整数(length <= 9),将该串转换为整数,并分别按16进制和10进制输出。

整数的长度为9,这样就超过了16位,单纯用8086的运算已经不能满足,加法的进位就会丢失,

而乘除法很可能会出现overflow.

所以要用到32位寄存器,这样就用到386指令.

如果不用386指令,也可以用两个寄存器对高16位和低16位分别进行操作.

下面是用386指令的源代码

ENTER   MACRO
       MOV   DL,0AH
       MOV   AH,2H
       INT   21H
       MOV   DL,0DH
       MOV   AH,2H
       INT   21H
        ENDM
.model  hex

.386

.data
msg   db    'Input numbers (length<=9):$'

.stack
    db    100 dup(?)
.code

main   proc   far

;*********************************
start: 
    push  ds
    mov   ax,0
    push  ax  
    mov   ax,@data
    mov   ds,ax  
    mov   dx,offset msg
    mov   ah,9
    int   21h
 
    call  rec
    enter
    call  tohex
    enter
    call  dec1
    enter
   
    ret  
main  endp
;-----------------------------------     
rec   proc   near        ;子程序rec是用来接收一个长度小于9的整数
    mov   ebx,0        ;并把它放入ebx中
  
newnum:
    mov   ah,01
    int   21h
    sub   al,30h
    jl   exit
    cmp   al,9d
    jg   exit
    cbw
    xchg  eax,ebx
    mov   ecx,10d
    mul   ecx
    xchg  eax,ebx
  
    add   ebx,eax
    jmp   newnum
exit:
    ret
rec   endp

;------------------------------------
tohex  proc   near           ;子程序tohex是把ebx中的数用16进制输出
    mov   ch,8
rotate:
    mov   cl,4
    rol   ebx,cl
    mov   al,bl
    and   al,0fh
    add   al,30h
    cmp   al,3ah
    jl   print
    add   al,7h
print:
    mov   dl,al
    mov   ah,2h
    int    21h
    dec   ch
    jnz   rotate
    ret
tohex  endp

;----------------------------------
dec1  proc  near            ;dec1是转化为十进制输出
    mov   ecx,100000000d
    call  todec
    mov   ecx,10000000d
    call  todec
    mov   ecx,1000000d
    call  todec
    mov   ecx,100000d
    call    todec
    mov   ecx,10000d
    call  todec
    mov   ecx,1000d
    call  todec
    mov   ecx,100d
    call  todec
    mov   ecx,10d
    call    todec
    mov   ecx,1d
    call  todec
    ret   
;--------------------------------
todec  proc  near
    mov   eax,ebx
    mov   edx,0
    div   ecx
    mov   ebx,edx
    mov   dx,ax
    add   dl,30h
    mov   ah,02h
    int   21h
    ret
todec  endp
dec1  endp

;----------------------------
end   main

机器学习技法第二次作业

趁着deadline的前一天把作业做完了,主要是后面两个编程的题目比较花时间。下面直接进入主题吧。 Question 1 这题直接求导就好了 Question 2 黑塞矩阵...
  • qian1122221
  • qian1122221
  • 2015年12月17日 20:11
  • 1632

Coursra-MachineLearning 第二次作业总结

Logistic Regression1.1 Visualizing the data我们的目标是根据ex2data1里面的数据,把被接受入学的数据和被拒绝入学的数据都标注在一张坐标图上。 为了表示...
  • dawningblue
  • dawningblue
  • 2017年09月30日 16:27
  • 128

计算机网络第二次作业

显示网卡基本信息小程序制作 一、运行界面 运行界面采用Java中的WindowBuilder设计的,界面如下图所示 其中在网卡基本信息一栏,网卡类型后面采用下拉框显示本机网卡设备,在IP...
  • ABnanna
  • ABnanna
  • 2017年09月30日 15:54
  • 140

第二次作业

什么是统一过程?统一过程的4个阶段是什么? 答:“统一过程”是一种统一的方法学,是把Booch方法、Jacobson方法、Rumbaugh方法中最优秀的特色组合在一起。 四个阶段为:      ...
  • leiying12qi
  • leiying12qi
  • 2013年10月15日 22:50
  • 302

第二次作业!

3.1 #include #include int main() {     int a=12,b=3;     float x=18.5,y=4.6;     printf...
  • TX_38381517155
  • TX_38381517155
  • 2017年10月29日 14:49
  • 57

【第二次作业】

第一题: #include /* 1. 写一个函数返回参数值为1的个数 比如:15 0000 1111 4个1 程序原型: int count_one_bits(unsig...
  • a781558066
  • a781558066
  • 2014年12月21日 16:08
  • 305

第二次作业~~~~~

题目:欲下载1.2GB的文件.现想在2小时内下载完毕,那么至少需要多少KB/S的下载速度?    答:  1.2*1024*1024/7200=174.76KB/S       需要每秒174.76K...
  • zhengbingru123
  • zhengbingru123
  • 2007年09月16日 20:09
  • 103

汇编语言作业

程序2:补全程序,计算   assume cs:code,ds:data data  segment    x db  45h    y db  ? data  ends   code...
  • L_dream_2016
  • L_dream_2016
  • 2017年05月08日 20:09
  • 263

汇编第二次实验

;功能:按要求输入字符,计算字符中的数字之和,并以十进制和二进制输出 ;作者:KDF5000 ;时间:2012.11.2 .386 DATA SEGMENT USE16 BUF...
  • kongdefei5000
  • kongdefei5000
  • 2012年11月03日 00:47
  • 708

汇编作业

蜂鸣器汇编: .global _start_start:LDR R0,=0XE02000A0LDR R1,[R0]BIC R1,R1,#(0XF)ORR R1,R1,#(0X1)STR R1,[R0]...
  • Mce_19
  • Mce_19
  • 2016年11月23日 20:55
  • 184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第二次的汇编作业
举报原因:
原因补充:

(最多只允许输入30个字)