700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微型计算机原理IMUL指令 微机原理与系统设计实验

微型计算机原理IMUL指令 微机原理与系统设计实验

时间:2023-05-09 11:33:44

相关推荐

微型计算机原理IMUL指令 微机原理与系统设计实验

没啥好说的,总结我电一波实验题目,关于汇编的……

题目要求

实验一EMU8086使用及8086指令系统

·编写一个简单的程序:将“This is my first ASM program-姓名(汉语拼音各人的姓名)”放在DS=1000H,BX=0000H开始的存储器单元中,然后将该内容搬移到BX=0100H开始的单元中,最后将该字符串通过DOS功能调用显示在屏幕上。

实验二 数制转换与数值运算编程

· 2.1将ASCII码表示的十进制数转换为二进制数。

· 2.2BCD码转换为二进制数

· 2.3两个非压缩BCD数加法程序。

· 2.4从键盘上输入任意两个不大于2位数的正整数,计算其乘积。结果在屏幕上显示。

实验三 顺序、分支、循环、子程序设计

·3.1教材P74例1。m=6,n=4,w=7。结果Q也放在内存中。

·3.2教材P75例3。

·3.3从键盘上输入1个数,判断其奇偶性,如果是奇数,屏幕上显示”It is odd”,否则显示”It is even”。

·3.4从键盘上输入N个字符(N<16),求这N个字符中’A’的个数,并将’A’的个数显示在屏幕上。

·3.5已知BUF1中有N1个按从小到大的顺序排列的互不相等的无符号数,BUF2中有N2个从小到大的顺序排列的互不相等的无符号数。编写程序将BUF1和BUF2中的数合并到BUF3中,使在BUF3中存放的数互不相等且按从小到大的顺序排列。

实验四综合性汇编程序设计

·4.1 计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。

·4.2 求N!。N为键盘输入的不大于8的正整数。

·4.3 从键盘输入一行字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这3个计数结果。

程序清单及结果:

1.

1 name "mycode"

2 org 100h

3 ; set segment register:

4 mov ax, 1000h

5 mov ds, ax

6 mov bx,0000h

7 ; print "This is my first ASM program-WangYuBo"

8 mov [02h], 'T'

9 mov [04h], 'h'

10 mov [06h], 'i'

11 mov [08h], 's'

12 mov [0ah], ' '

13 mov [0ch], 'i'

14 mov [0eh], 's'

15 mov [10h], ' '

16 mov [12h], 'm'

17 mov [14h], 'y'

18 mov [16h], ' '

19 mov [18h], 'f'

20 mov [1ah], 'i'

21 mov [1ch], 'r'

22 mov [1eh], 's'

23 mov [20h], 't'

24 mov [22h], ' '

25 mov [24h], 'A'

26 mov [26h], 'S'

27 mov [28h], 'M'

28 mov [2ah], ' '

29 mov [2ch], 'p'

30 mov [2eh], 'r'

31 mov [30h], 'o'

32 mov [32h], 'g'

33 mov [34h], 'r'

34 mov [36h], 'a'

35 mov [38h], 'm'

36 mov [3ah], '-'

37 mov [3ch], 'W'

38 mov [3eh], 'a'

39 mov [40h], 'n'

40 mov [42h], 'g'

41 mov [44h], 'Y'

42 mov [46h], 'u'

43 mov [48h], 'B'

44 mov [4ah], 'o'

45 mov cx,0025h ;一共37个字符

46 mov bx,0100h

47 mov si,0002h

48 ;string copy

49 copy:

50 mov ax,ds:[si]

51 mov ds:[bx+si],ax

52 add si,2

53 loop copy

54 mov bx,0102h

55 mov cx,0025h

56 ;printf string

57 printf:

58 mov dl,[bx]

59 mov ah,02h

60 int 21h

61 add bx,2

62 loop printf

63 mov ah,1

64 int 21h

65

66 mov ah,4ch

67 int 21h

68 ret

View Code

2.1

1 DATA SEGMENT

2 index DB 30H,30H,32H,35H,36H

3 DATA ENDS

4

5 CODE SEGMENT

6 ASSUME CS:CODE, DS:DATA

7 START:

8 MOV AX, DATA

9 MOV DS, AX

10 MOV SI, OFFSET index

11 MOV CX,5

12 FOR1:

13 MOV AL,[SI]

14 SUB AL,30H

15 MOV [SI],AL

16 INC SI

17 LOOP FOR1

18 MOV AX,0000h

19 MOV BX,0000h

20 LEA SI,index

21

22 MOV DX,10000

23 MOV AL,[SI]

24 IMUL DX

25 MOV BX,AX

26

27 MOV DX,1000

28 INC SI

29 MOV AL,[SI]

30 IMUL DX

31 ADD BX,AX

32

33 MOV DX,100

34 INC SI

35 MOV AL,[SI]

36 IMUL DX

37 ADD BX,AX

38

39 MOV DX,10

40 INC SI

41 MOV AL,[SI]

42 IMUL DX

43 ADD BX,AX

44

45 INC SI

46 MOV AL,[SI]

47 ADD BX,AX

48

49 MOV AX,BX

50

51 ;MOV AX,4C00h

52 ;INT 21h

53

54 CODE ENDS

55 END START

View Code

2.2

1 code segment

2 ASSUME CS:CODE

3 start:

4 ;store data at ds:[3500h]~ds:[3507h]

5 mov si,3500h

6 mov [si],01

7 mov [si+1],02

8 mov [si+2],03

9 mov [si+3],04

10 mov [si+4],05

11 mov [si+5],06

12 mov [si+6],07

13 mov [si+7],08

14 mov cx,4

15 mov di,3510h

16 mov ax,0000h

17 mov bx,000Ah

18 mov dx,0000h

19 for:

20 mov al,ds:[si]

21 imul bl

22 mov dx,ds:[si+1]

23 and dx,00FFh

24 adc ax,dx

25 mov ds:[di],al

26 add si,2

27 inc di

28 loop for

29 mov ax, 4c00h

30 int 21h

31 ends

32 end start

View Code

2.3

1 code segment

2 ASSUME CS:CODE

3 start:

4 mov [0],01010110b ;56h

5 mov [1],00h

6 mov [2],01111000b ;78h 十进制和为134

7 mov [3],00h

8 mov ax,[0] ; ax = 0056h

9 mov bx,[2] ; bx = 0078h

10 mov cx,000Ah

11 mov dx,0000h ;累加和

12 push ax

13 push bx

14 and ax,00F0h

15 and bx,00F0h

16 add ax,bx

17 shr ax,4 ;dx = 000c h

18 imul cx

19 mov dx,ax

20 pop bx

21 pop ax

22 and ax,000Fh

23 and bx,000Fh

24 add ax,bx

25 add dx,ax ;dx store the sum in hex

26 ;----------- print dx with demical number --------

27 mov ax,dx

28 mov cx,0

29 mov bx,10

30 disp1:

31 mov dx,0

32 div bx

33 push dx

34 inc cx

35 or ax,ax

36 jne disp1

37 disp2:

38 mov ah,2

39 pop dx

40 add dl, 30H

41 int 21h

42 loop disp2

43 ;-----------the end------------

44 mov ax,4c00h

45 int 21h

46 ends

47 end start

View Code

2.4

1 data segment

2 str1 db 'please input a number to a:$'

3 str2 db 'please input a number to b:$'

4 str3 db 'result c=a*b=$'

5 a dw ?

6 b dw ?

7 c dw ?

8 data ends

9

10 code segment

11 assume cs:code,ds:data

12 main proc far

13 start:

14 mov ax,data

15 mov ds,ax

16 lea dx,str1 ;ouput str1

17 mov ah,9h

18 int 21h

19 call input ;input a

20 mov a,bx

21 lea dx,str2 ;ouput str2

22 mov ah,9h

23 int 21h

24 call input ;input b

25 mov b,bx

26 lea dx,str3 ;ouput str3

27 mov ah,9h

28 int 21h

29 mov ax,a

30 aad

31 mov bx,ax

32 mov ax,b

33 aad

34 mul bx ;ax = a*b

35 mov word ptr c,ax ;c = a*b

36 mov di,0ah ;di = 10

37 mov cx,0

38 ToTen: ;convert to decimal

39 div di

40 push dx

41 inc cx

42 cmp ax,0

43 je print

44 cwd

45 jmp ToTen

46 print: ;output result

47 pop dx

48 add dl,30h

49 mov ah,2h

50 int 21h

51 loop print

52 ret

53 main endp

54 input proc

55 mov bx,0

56 inputa:

57 mov ah,1 ;first char

58 int 21h

59 sub al,30h

60 mov bl,al

61 mov ah,1 ;second char

62 int 21h

63 cmp al,0dh ;compare if al==Enter

64 je exit

65 sub al,30h

66 mov cl,8 ;shift operation

67 rol bx,cl

68 mov bl,al

69 jmp exit

70 exit:

71 call crlf

72 ret

73 input endp

74 ;print next line

75 crlf proc near

76 mov dl,0ah

77 mov ah,2h

78 int 21h

79 mov dl,0dh

80 mov ah,2h

81 int 21h

82 ret

83 crlf endp

84

85 code ends

86 end start

View Code

3.1

1 data segment

2 address db 06h,04h,07h

3 string1 db ' m=6,n=4,w=7 $'

4 string2 db ' m * n - w = $'

5 data ends

6

7 code segment

8 ASSUME CS:CODE,DS:data

9 main:

10 mov ax,data

11 mov ds,ax

12 mov si,offset address

13 mov al,[si] ;al = m = 6

14 mov bl,[si+1] ;bl = n = 4

15 mul bl ;al = m*n

16 push ax

17 lea dx,string1 ;output string1

18 mov ah,09h

19 int 21h

20 call crlf

21 pop ax

22 mov bx,0 ;bl = 0

23 mov bl,[si+2] ;bl = w = 7

24 sub ax,bx ;ax = m * n - w

25 push ax

26 lea dx,string2 ;output string2

27 mov ah,09h

28 int 21h

29 pop ax

30 ;print demical result

31 mov cx,0

32 mov bx,10

33 disp1:

34 mov dx,0

35 div bx ;如果除数是16位,AX储存商,DX储存余数

36 push dx

37 inc cx

38 or ax,ax

39 jne disp1

40 disp2:

41 mov ah,2

42 pop dx

43 add dl, 30H

44 int 21h

45 loop disp2

46 mov ax,4c00h

47 int 21h

48

49 crlf proc near

50 push dx

51 mov dl,0ah

52 mov ah,2h

53 int 21h

54 mov dl,0dh

55 mov ah,2h

56 int 21h

57 pop dx

58 ret

59 crlf endp

60 code ends

61 end main

View Code

3.2

1 shuju segment

2 DATA db 94,61,86,86,53,84,81,63,45,80,58,81,75,95, 70,85,49,46,85,77,87,99,94,66,78,48,86,65,76,89,74,93,73,100,54,78,75,53,86,50,53,68,63,86,78,62,100,56,48,63,63,52,80,46,100,69,49,95,93,54,75,82,95,51,88,100,82,82,54,96,63,79,66,94,78,81,95,86,95,67

3 BUFFER 4 dup(0)

4 str0 db "The 80 scores are: $"

5 str1 db "#Number of score above 90 points: $"

6 str2 db "#Number of score between 70 points and 89 points: $"

7 str3 db "#Number of score between 60 points and 69 points: $"

8 str4 db "#Number of score above 60 points: $"

9 shuju ends

10

11 code segment

12 assume CS:code,DS:shuju

13 main:

14 mov ax,shuju

15 mov ds,ax

16 mov dx,0000h

17 mov bx,0000h

18 mov cx,80

19 mov si,offset DATA

20 mov di,offset BUFFER

21 nine:

22 mov al,[si]

23 cmp al,90

24 jc eight

25 inc dh

26 jmp stor

27 eight:

28 cmp al,70

29 jc six

30 inc dl

31 jmp stor

32 six:

33 cmp al,60

34 jc five

35 inc bh

36 jmp stor

37 five:

38 inc bl

39 stor:

40 inc si

41 loop nine

42

43 mov [di],dh

44 mov [di+1],dl

45 mov [di+2],bh

46 mov [di+3],bl

47

48 lea dx,str0 ;output string0

49 mov ah,09h

50 int 21h

51 mov cx,80

52 lea si,DATA

53 show:

54 mov ax,0

55 mov al,[si]

56 call printf

57 call space

58 inc si

59 loop show

60 call crlf

61 lea dx,str1

62 mov ah,09h

63 int 21h

64 mov ax,0

65 mov al,[di]

66 call printf

67 call crlf

68 lea dx,str2

69 mov ah,09h

70 int 21h

71 mov ax,0

72 mov al,[di+1]

73 call printf

74 call crlf

75 lea dx,str3

76 mov ah,09h

77 int 21h

78 mov ax,0

79 mov al,[di+2]

80 call printf

81 call crlf

82 lea dx,str4

83 mov ah,09h

84 int 21h

85 mov ax,0

86 mov al,[di+3]

87 call printf

88 call crlf

89 mov ax,4c00h

90 int 21h

91

92 printf proc near

93 push cx

94 push bx

95 push dx

96 mov cx,0

97 mov bx,10

98 disp1:

99 mov dx,0

100 div bx

101 push dx

102 inc cx

103 or ax,ax

104 jne disp1

105 disp2:

106 mov ah,2

107 pop dx

108 add dl,30H

109 int 21h

110 loop disp2

111 ;call crlf

112 pop dx

113 pop bx

114 pop cx

115 ret

116 printf endp

117 crlf proc near

118 push ax

119 push dx

120 mov dl,0ah

121 mov ah,2h

122 int 21h

123 mov dl,0dh

124 mov ah,2h

125 int 21h

126 pop dx

127 pop ax

128 ret

129 crlf endp

130

131 space proc near

132 push ax

133 push dx

134 mov dl,20h

135 mov ah,2h

136 int 21h

137 pop dx

138 pop ax

139 ret

140 space endp

141 code ends

142 end main

View Code

3.3

1 assume cs:code,ds:data

2

3 data segment

4 string0 db 'Welcome to here!Input a number: $'

5 string1 db 'It is odd $'

6 string2 db 'It is even $'

7 string3 db 'Inlegal character!$'

8 data ends

9

10 code segment

11 start:

12 mov ax,data

13 mov ds,ax

14 lea dx,string0 ;output string0

15 mov ah,09h

16 int 21h

17

18 mov cx,10

19 input:

20 mov ah,01h

21 int 21h

22 cmp al,39h

23 ja inlegal

24 cmp al,0dh ;enter \r\n

25 je outside

26 mov bl,al

27 loop input

28 inlegal:

29 call CRLF

30 lea dx,string3 ;output string3

31 mov ah,09h

32 int 21h

33 jmp tail

34 outside:

35 call CRLF

36 and bl,01h

37 cmp bl,1

38 jne even

39 odd:

40 lea dx,string1

41 mov ah,09h

42 int 21h

43 jmp tail

44 even:

45 lea dx,string2

46 mov ah,09h

47 int 21h

48

49 tail:

50 mov ax,4c00h

51 int 21h

52

53 CRLF PROC NEAR

54 PUSH AX

55 PUSH DX

56 MOV DL,0AH

57 MOV AH,2H

58 INT 21H

59 MOV DL,0DH

60 MOV AH,2H

61 INT 21H

62 POP DX

63 POP AX

64 RET

65 CRLF ENDP

66

67 code ends

68 end start

View Code

3.4

1 data segment

2 string1 db 'please input a string: $'

3 string2 db 'the number of char a: $'

4 data ends

5

6 code segment

7 main proc far

8 assume cs:code,ds:data

9 start:

10 mov ax,data

11 mov ds,ax

12 mov cx,16

13 lea dx,string1 ;output string1

14 mov ah,09h

15 int 21h

16 mov dx,0 ;dl store the number of 'a'

17 write:

18 mov ah,1h

19 int 21h

20 cmp al,0dh ;enter \r\n

21 je print

22 cmp al,41h ;'a'

23 jne next

24 inc dl ;dl++

25 next:

26 loop write

27

28 print:

29 call crlf

30 push dx

31 lea dx,string2

32 mov ah,09h

33 int 21h

34 pop dx

35 add dl,30h

36 mov ah,02h

37 int 21h

38

39 mov ax,4c00h

40 int 21h

41 main endp

42

43 crlf proc near

44 push dx

45 mov dl,0ah

46 mov ah,2h

47 int 21h

48 mov dl,0dh

49 mov ah,2h

50 int 21h

51 pop dx

52 ret

53 crlf endp

54 code ends

55 end start

View Code

3.5

1 data segment

2 BUF1 db 1,2,3,5,7,9

3 BUF2 db 0,2,4,6,8

4 BUF3 db 32 dup(204)

5 N1 db 6

6 N2 db 5

7 string db 'Array merged completed!$'

8 data ends

9

10 code segment

11 ASSUME CS:CODE,DS:DATE

12 start:

13 mov ax,data

14 mov ds,ax

15 lea si,BUF1 ;pointer of buffer1

16 lea di,BUF2 ;pointer of buffer2

17 lea bx,BUF3 ;pointer of buffer3

18 mov ax,0

19 mov cx,0

20 mov dx,0

21 mov ah,N1 ;number of N1

22 mov al,N2 ;number of N2

23 mov cl,N1

24 add cl,N2 ;number of N1+N2

25 mov dx,word ptr N2 ;number of N1+N2-1

26 dec dx

27 mov dh,0

28 add dl,ah

29

30 mov ax,word ptr N1 ;number of N1-1

31 dec ax

32 mov ah,0

33 while:

34 cmp si,ax

35 ja b2

36 cmp di,dx

37 ja b1

38 push dx

39 mov dx,[di]

40 cmp [si],dl

41 pop dx

42 ja b2 ;buf1[si] > buf2[di]

43 jb b1 ;buf1[si] < buf2[di]

44 push dx

45 push ax

46 mov dx,[si]

47 mov [bx],dl;buf1[si] == buf2[di]

48 add dl,30h

49 mov ah,2h

50 int 21h

51 pop ax

52 pop dx

53 inc si

54 inc di

55 inc bx

56 dec cx

57 jmp tail

58 b2:

59 push dx

60 push ax

61 mov dx,[di]

62 mov [bx],dl

63 add dl,30h

64 mov ah,2h

65 int 21h

66 pop ax

67 pop dx

68 inc bx

69 inc di

70 jmp tail

71 b1:

72 push dx

73 push ax

74 mov dx,[si]

75 mov [bx],dl

76 add dl,30h

77 mov ah,2h

78 int 21h

79 pop ax

80 pop dx

81 inc bx

82 inc si

83 tail:

84 loop while

85 call crlf

86 lea dx,string

87 mov ah,09h

88 int 21h

89

90 mov ax,4c00h

91 int 21h

92

93 crlf proc near

94 push dx

95 mov dl,0ah

96 mov ah,2h

97 int 21h

98 mov dl,0dh

99 mov ah,2h

100 int 21h

101 pop dx

102 ret

103 crlf endp

104 code ends

105 end start

View Code

4.1

1 data segment

2 string0 db 'Now value of n*(n+1)= 1,and value of S= 1$'

3 string1 db 'Now value of n*(n+1)= $'

4 string2 db ',and value of S= $'

5 string3 db 'Eventually value of S= $'

6 data ends

7 ; calculate 1 + 2*3 + 3*4 + 4*5 +......+n*(n+1) until n*(n+1)>200

8 code segment

9 start:

10 ;-------initialization-------

11 mov ax,data

12 mov ds,ax

13 lea dx,string0

14 mov ah,09h

15 int 21h

16 call crlf

17 mov ax,2 ; ax=2

18 mov bx,ax

19 inc bx ; bx=3 : bx-1 = ax

20 mov cx,15 ; 大概循环15次

21 mov dx,1 ; dx=1 : dx store the value S

22 for:

23 imul bl ; al = n*(n+1)

24 cmp al,200

25 ja outside

26 add dx,ax ; dx = S

27 push bx

28 push cx

29 push dx

30 push ax

31 lea dx,string1

32 mov ah,09h

33 int 21h

34 pop ax

35 call print

36 ;push ax

37 lea dx,string2

38 mov ah,09h

39 int 21h

40 ;pop ax

41 pop dx

42 mov ax,dx

43 push dx

44 call print

45 call crlf

46 pop dx

47 pop cx

48 pop bx

49 mov ax,bx

50 inc bx

51 loop for

52 outside:

53 mov ax,dx

54 push ax

55 lea dx,string3 ;output string3

56 mov ah,09h

57 int 21h

58 pop ax

59 call print

60 mov ax, 4c00h

61 int 21h

62

63 crlf:

64 PUSH AX

65 PUSH DX

66 MOV DL,0AH

67 MOV AH,2H

68 INT 21H

69 MOV DL,0DH

70 MOV AH,2H

71 INT 21H

72 POP DX

73 POP AX

74 RET

75 print:

76 push ax

77 mov cx,0

78 mov bx,10

79 disp1:

80 mov dx,0

81 div bx

82 push dx

83 inc cx

84 or ax,ax

85 jne disp1

86 disp2:

87 mov ah,2

88 pop dx

89 add dl, 30H

90 int 21h

91 loop disp2

92 pop ax

93 ret

94

95 code ends

96 end start

View Code

4.2

1 data segment

2 string0 db 'Welcome to here!Input a number: $'

3 string1 db 'Inlegal character! $'

4 string2 db 'Result of N! = $'

5 data ends

6

7 code segment

8 assume cs:code,ds:data

9 start:

10 mov ax,data

11 mov ds,ax

12 lea dx,string0

13 mov ah,09h

14 int 21h

15 mov ah,01h ;input number N

16 int 21h

17 call CRLF

18 cmp al,38h ; N <= 8

19 ja inlegal

20 cmp al,30h ; N >= 0

21 jb inlegal

22 je part01

23 cmp al,31h

24 je part01

25 sub al,30h

26 mov cx,0

27 mov cl,al

28 dec cl ;cx = N-1

29 mov ax,1

30 mov bx,2

31 mov dx,0 ; store the value of N!

32 mul:

33 imul bx

34 mov dx,ax

35 inc bx

36 loop mul

37 push dx ; dx = N!

38 lea dx,string2

39 mov ah,09h

40 int 21h

41 pop ax ; ax = N!

42 call print

43 tail:

44 mov ax, 4c00h

45 int 21h

46 part01:

47 lea dx,string2

48 mov ah,09h

49 int 21h

50 mov ax,1

51 call print

52 jmp tail

53 inlegal:

54 lea dx,string1 ;output string1

55 mov ah,09h

56 int 21h

57 jmp tail

58 print:

59 push ax

60 mov cx,0

61 mov bx,10

62 disp1:

63 mov dx,0

64 div bx

65 push dx

66 inc cx

67 or ax,ax

68 jne disp1

69 disp2:

70 mov ah,2

71 pop dx

72 add dl,30H

73 int 21h

74 loop disp2

75 pop ax

76 ret

77 CRLF:

78 PUSH AX

79 PUSH DX

80 MOV DL,0AH

81 MOV AH,2H

82 INT 21H

83 MOV DL,0DH

84 MOV AH,2H

85 INT 21H

86 POP DX

87 POP AX

88 RET

89 ends

90 end start

View Code

4.3

1 data segment

2 string0 db ' Welcome to here!Input a string: $'

3 string1 db '**********Count of alphabet: $'

4 string2 db '**********Count of number: $'

5 string3 db '**********Count of other character: $'

6 count_alph db 0

7 count_num db 0

8 count_char db 0

9 ends

10

11 code segment

12 assume cs:code,ds:data

13 start:

14 mov ax, data

15 mov ds, ax

16 lea si,count_alph

17 lea dx,string0 ;output string0

18 mov ah,09h

19 int 21h

20 mov cx,40

21 input:

22 mov ah,01h

23 int 21h

24 cmp al,0dh ;enter \r\n

25 je printf_count

26 cmp al,48 ;'0'

27 jb add_char

28 cmp al,58 ;'9'+1

29 jb add_num

30 cmp al,65 ;'A'

31 jb add_char

32 cmp al,91 ;'Z'+1

33 jb add_alph

34 cmp al,97 ;'a'

35 jb add_char

36 cmp al,123 ;'z'+1

37 jb add_alph

38 jmp add_char

39 inside:

40 loop input

41 printf_count:

42 call crlf

43 call crlf

44 lea dx,string1 ;output string1

45 mov ah,09h

46 int 21h

47 mov al,[si]

48 mov ah,0

49 call print

50 call crlf

51 call crlf

52 lea dx,string2 ;output string2

53 mov ah,09h

54 int 21h

55 mov al,[si+1]

56 mov ah,0

57 call print

58 call crlf

59 call crlf

60 lea dx,string3 ;output string3

61 mov ah,09h

62 int 21h

63 mov al,[si+2]

64 mov ah,0

65 call print

66 tail:

67 mov ax, 4c00h

68 int 21h

69 crlf:

70 PUSH AX

71 PUSH DX

72 MOV DL,0AH

73 MOV AH,2H

74 INT 21H

75 MOV DL,0DH

76 MOV AH,2H

77 INT 21H

78 POP DX

79 POP AX

80 RET

81 print:

82 push ax

83 mov cx,0

84 mov bx,10

85 disp1:

86 mov dx,0

87 div bx

88 push dx

89 inc cx

90 or ax,ax

91 jne disp1

92 disp2:

93 mov ah,2

94 pop dx

95 add dl, 30H

96 int 21h

97 loop disp2

98 pop ax

99 ret

100 add_alph:

101 push dx

102 mov dl,[si]

103 inc dl

104 mov [si],dl

105 pop dx

106 jmp inside

107 add_num:

108 push dx

109 mov dl,[si+1]

110 inc dl

111 mov [si+1],dl

112 pop dx

113 jmp inside

114 add_char:

115 push dx

116 mov dl,[si+2]

117 inc dl

118 mov [si+2],dl

119 pop dx

120 jmp inside

121 ends

122 end start

View Code

上面很多题目都涉及到了dos输出,其实还挺有意思的。下面的代码是把ax寄存器中保存的十六进制值打印出来的函数printf:

code segment

start:

mov ax,245

call printf

mov ax,1234

call printf

mov ax,2222

call printf

mov ax, 4c00h

int 21h

printf proc near

push cx

push bx

push dx

mov cx,0

mov bx,10

disp1:

mov dx,0

div bx ;如果除数是16位,AX储存商,DX储存余数

push dx

inc cx

or ax,ax

jne disp1 ;ax!=0 then jump to disp1

disp2: ;stack top 2-4-5 stack bottom ,cx=3 means 3 elements in stack

mov ah,2

pop dx

add dl, 30H ;print :02h->32h ('2') 04h->34h ('4') 05h->35h ('5')

int 21h

loop disp2

call crlf

pop dx

pop bx

pop cx

ret

printf endp

crlf proc near

push ax

push dx

mov dl,0ah

mov ah,2h

int 21h

mov dl,0dh

mov ah,2h

int 21h

pop dx

pop ax

ret

crlf endp

code ends

end start

输入一个小于100的正整数(两位以内)用了input函数,关键在于指令aad:

code segment

start:

mov ax,0

call input

mov ax,bx

aad

call printf

mov ax, 4c00h ; exit to operating system.

int 21h

printf proc near

push cx

push bx

push dx

mov cx,0

mov bx,10

disp1:

mov dx,0

div bx ;如果除数是16位,AX储存商,DX储存余数

push dx

inc cx

or ax,ax

jne disp1 ;ax!=0 then jump to disp1

disp2: ;stack top 2-4-5 stack bottom ,cx=3 means 3 elements in stack

mov ah,2

pop dx

add dl, 30H ;print :02h->32h ('2') 04h->34h ('4') 05h->35h ('5')

int 21h

loop disp2

call crlf

pop dx

pop bx

pop cx

ret

printf endp

input proc

mov bx,0

mov ah,1 ;first char

int 21h

sub al,30h

mov bl,al

mov ah,1 ;second char

int 21h

cmp al,0dh ;compare if al==Enter

je exit

sub al,30h

mov cl,8 ;shift operation

rol bx,cl

mov bl,al

jmp exit

exit:

call crlf

ret

input endp

crlf proc near

mov dl,0ah

mov ah,2h

int 21h

mov dl,0dh

mov ah,2h

int 21h

ret

crlf endp

ends

end start

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。