汇编语言学习历程(一)分支、循环控制

问题介绍:

以十进制形式输出有符号字数组BUF中每个元素的值:负数前面需要输出符号,正数前面不需要符号。各个值之间以空格隔开

问题分析:

一个基本的汇编语言入门的例子,需要掌握基本的程序结构,数据定义,还有一些流程控制语句就可以完成了

源代码:

 1  .386
 2  data segment use16
 3   masg0 db 0ah, 0dh, '=====output singned numbers======',0dh,0ah,'$'
 4   masg1 db 'numbers are:  $'
 5   nums dw 9
 6   buf dw 9, -90254, -254255, -25532767, -32768
 7 count equ ($ - buf)/2
 8  data ends
 9  
10  stack segment use16 stack
11   db 200 dup(0)
12  stack ends
13  
14  code segment use16 
15   assume cs:code, ds:data, ss:stack
16  start:
17   ; 初始化
18   mov ax, data
19   mov ds, ax
20   mov ax, stack
21   mov ss, ax
22   
23   ; 输出提示
24   lea dx, masg0
25   mov ah, 9
26   int 21h
27   
28   lea dx, masg1
29   mov ah, 9
30   int 21h
31   
32   ;以十进制输出有符号字数组的元素
33   mov cx, nums
34 
35 shownum:  ;一个个数字处理
36   mov bx, 9
37   sub bx, cx
38   mov ax, bx
39   cwde ;ax扩展到eax
40   mov ebx, eax
41   mov ax, buf[2*ebx] ;获得数据
42   dec cx   ;处理的数据减少一个
43   push cx ;保存余下数据的长度
44   cmp ax, 0  ;取正
45   jge positive
46     neg ax  ;取绝对值
47     ;显示符号
48     mov bx, ax ;保存ax的元素
49     mov dl, 2dh ;显示负号
50     mov ah, 2
51     int 21h
52     mov ax, bx ;还原ax的元素
53   positive:
54     mov cx, 0
55     countbit:       ;一位位处理
56       mov dx, 0
57       mov bx, 10
58       div bx  ;除10
59       push dx ;保存余数
60       inc cx  ;位数目加一
61       cmp ax, 0
62       ja countbit  ;商不为零跳转
63     ;显示
64     showbit:
65       pop dx
66       dec cx
67       add dl, 30h
68       mov ah, 2
69       int 21h
70       cmp cx, 0
71       ja showbit ;大于零,还有位未处理跳转
72   ;显示空格
73   mov dl, 20h
74   mov ah, 2
75   int 21h
76   
77   pop cx    ;数字的数目重新获得
78   cmp cx, 0
79   ja shownum ; 大于零,还有数字未处理
80   ;退出
81   mov ah, 4ch
82   int 21h
83  code ends
84  end start

运行结果:

原文地址:https://www.cnblogs.com/hustlijian/p/2058232.html